Wie bekommt man eine Prozess' main-Fenster-handle in C#?
Ziel ist es, programmgesteuert starten einer Windows Form, seinen Griff, und senden Sie info, um seine wndProc () - Funktion mit Win-Api SendMessage () - Funktion.
Bekam ich die SendMessage () - Teil gekümmert, aber jetzt ist das problem immer die form handle, nachdem der Prozess gestartet wurde.
Meine erste Vermutung war, dass Prozess' MainWindowHandle-Eigenschaft würde mich der Griff, ich bin auf der Suche, aber nachdem ich den Prozess starten MainWindowHandle bleibt gleich 0 und der folgende code zeigt nicht den Griff der Prozess, den ich gerade gestartet:
foreach (Process p in Process.GetProcesses())
{
Console.WriteLine(p.MainWindowHandle);
}
Kann mir jemand sagen, wie Sie dies tun und ob es überhaupt gemacht werden kann?
- Versuchen Sie
Thread.Sleep(3000);
nach dem Start des Prozesses, zu sehen, ob das Ergebnis anders. Auch, welchen Prozess werden Sie starten? Nicht einmal ein Fenster haben? - es scheint so, als ob man der thread hat den trick. Dank
- kannst du deinen Kommentar als Antwort?
- Getan. Fand auch einige mehr Sachen hinzufügen, die in es, um tatsächlich machen es Antwort-würdig.
- Was war der Punkt, der es, sowieso? Es sieht nicht wie er ist sich der Abnahme-Funktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Manchmal der Prozess dauert eine Sekunde, die alles einstellen, aber das Objekt sofort zurückgegeben.
Aus diesem Grund, Sie sollten ein bisschen warten, um zu lassen, den Prozess wirklich zu bekommen, begann es, und dann ist es MainWindowHandle wird entsprechend gesetzt werden, bereit, verzehrt zu werden.
Anderen Weg, es zu tun in einer mehr intelligente Art und Weise wäre:
Dazu führen, dass der Prozess zu starten, und warten Sie, bis die MainWindowHandle ist nicht leer.
Refresh
Methode verwirft die zwischengespeicherten Informationen, so dass die nächste mal, wenn Sie Zugriff auf dieMainWindowHandle
Eigenschaft, es holt es aus dem aktuellen Fenster, als nötig. Siehe update meines posts.