2010-06-13 5 views
10

Je souhaite ouvrir à partir de C# une application (flashplayer autonome) et la positionner sur (0,0) sur l'écran. Comment puis-je faire ceci? Jusqu'à présent, je suis parvenu à ouvrir flashplayer:Processus d'ouverture et changement de position de la fenêtre

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 

namespace swflauncher 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Process flash = new Process(); 
      flash.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 

      flash.StartInfo.FileName = "D:\\development\\flex4\\runtimes\\player\\10\\win\\FlashPlayer.exe"; 
      flash.Start(); 
     } 
    } 
} 

Répondre

6

Essayez SetWindowPos comme décrit here. This page montre comment l'appeler à partir de C#.

+2

Pas une bonne réponse car il n'y a pas de code de travail fourni. En outre, la page montrant "comment l'appeler de C#" est un gâchis et ne fournit pas réellement un exemple complet (méthode inconnue GetActiveWindowHandle). La réponse inférieure de l'auteur est beaucoup mieux. Concis et fonctionnel. –

5

Une fois que vous démarrez le Process, sa propriété MainWindowHandle doit être réglé sur une poignée de Windows qui peut être utilisé pour manipuler la fenêtre principale de l'application a commencé. Je ne pense pas qu'il existe un moyen de le déplacer directement en utilisant l'API .NET, mais vous pouvez utiliser la fonction API MoveWindow via P/Invoke.

Voici quelques liens où vous pouvez trouver plus d'informations:

+1

Process.WaitForInputIdle() sera important. –

29

merci les gars, ça marche maintenant! :)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.Runtime.InteropServices; 
using System.Threading; 

namespace swflauncher 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Process flash = new Process(); 
      flash.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 

      flash.StartInfo.FileName = "D:\\development\\flex4\\runtimes\\player\\10\\win\\FlashPlayer.exe"; 
      flash.Start(); 
      Thread.Sleep(100); 

      IntPtr id = flash.MainWindowHandle; 
      Console.Write(id); 
      Program.MoveWindow(flash.MainWindowHandle, 0, 0, 500, 500, true); 
     } 

     [DllImport("user32.dll", SetLastError = true)] 
     internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint); 


    } 
} 
+4

Beaucoup mieux que la réponse parce que vous avez pris la peine de partager le code de travail, merci. – u8it

Questions connexes