Y a-t-il un moyen d'obtenir la fenêtre de la fenêtre (INTPTR) pour une fenêtre après son lancement d'une application C # avec process.Start ()? P>
4 Réponses :
Si c'est la fenêtre principale que vous avez suivie, processus.mainwindowhandle code>
vous donnera ce dont vous avez besoin. P>
Utilisez
process.MainWindowHandle;
Bonjour Jan, pour moi, la poignée est toujours zéro et ne va jamais à une autre valeur, même après une boucle infinie. J'utilise le code suivant: proc.startinfo.filename = @ "C: \ Documents et paramètres \ Somme \ Desktop \ PortableApps \ Notepad ++ portable \ Notepad + + portable.exe"; proc.startinfo.arguments = string.empty; proc.Start (); IntPTR APPHWND = PROC.MAINWINDOWHANDLE; tandis que (apphwnd == intptr.zero) {thread.sleep (100); apphwnd = proc.Mainwindowhandle; } Qu'est-ce qui ne va pas?
Vous pouvez également appeler actualiser () sur le processus pour vous assurer que les informations sont précises p>
Ce n'est pas un sujet récent, mais les réponses sont incomplètes. P>
Je suis d'accord avec la solution de processus.MainWindowWandle et d'attendre la valeur mais pas avec le sommeil. P>
Si vous venez de démarrer un processus et que vous souhaitez utiliser sa poignée de fenêtre principale, envisagez d'utiliser la méthode WaitForinPutidle pour permettre au processus de finition de démarrage, en veillant à ce que la poignée principale de la fenêtre a été créée. P> blockQuote>
processus.WaitForinPutiveDle p>
Cette surcharge s'applique uniquement aux processus avec une interface utilisateur et, par conséquent, une boucle de message. P> blockQuote>
Je pense que cela devrait être un commentaire.
Je suis désolé, pour des raisons, cette attente .... Fonction jeter l'exception (il n'y en a qu'un), je vais résoudre avec sommeil et rafraîchira
Le processus.waitforinputidle code> semble revenir presque immédiatement s'il est utilisé sur une application WPF. Je crois que cela est dû aux internales WPF ...
Il revient presque immédiatement pour mon application .NET 4.5. Personne précédente a déclaré WPF, le mien est juste une application de bureau.
Processus p = processus.start ("Notepad"); p.waitforinputidle (); Setparent (p.mainwindowhandle, Cbox.handle);