10
votes

C # Obtenir la poignée de la fenêtre après avoir démarré un processus

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 ()?


1 commentaires

Processus p = processus.start ("Notepad"); p.waitforinputidle (); Setparent (p.mainwindowhandle, Cbox.handle);


4 Réponses :


25
votes

Si c'est la fenêtre principale que vous avez suivie, processus.mainwindowhandle vous donnera ce dont vous avez besoin.


0 commentaires

8
votes

Utilisez

process.MainWindowHandle;


2 commentaires

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?


Selon ceci ( xtremedotNetTalk.com/.../a>) Il peut Soyez également zéro car une application affiche une boîte de dialogue ou initialisée d'abord.



2
votes

Vous pouvez également appeler actualiser () sur le processus pour vous assurer que les informations sont précises


0 commentaires

6
votes

4 commentaires

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 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.