Handle direkt nach Programmstart
-
Hallo zusammen, kann ich irgendwie ein Programm starten und direkt von diesen Programm ein Fensterhandle zu bekommen?
Ich möchte ein Programm schreiben welches ein anderes Startet und Daten aus entsprechenden Textfeldern des gestarteten Programmes ausließt.
Mit FindWindow kann ich über den Titel suchen, schon klar aber das ist mir ein wenig zu unsicher falls zwei Fenster zufällig den selben Titel verwenden.
-
Mhm ... wenn Du CreateProcess zum Starten benutzt, bekommst Du doch ProzessId, ThreadId usw. zurück.
-
Entweder über CreateProcess oder ShellExecuteEx !
-
leute er schrieb Fensterhandle. es ist eine unsitte dieses forums dass teilnehmer stets antworten verfassen, ohne die frage oder die vorangegangenen antworten gelesen zu haben.
@OP: Wie stellst du dir das vor? nicht jeder prozess hat ein fenster und nicht jeder prozess hat nur 1 fenster. wenn dir findWindow nicht gefällt kannst du ja ne funktion schreiben die alle fenster, die einem prozess bzw. thread gehören, zurückliefert.
-
Bombe2k schrieb:
wenn dir findWindow nicht gefällt kannst du ja ne funktion schreiben die alle fenster, die einem prozess bzw. thread gehören, zurückliefert.
Und genau deshalb der Hinweis auf das, was über CreateProcess zurückgeliefert wird. Ein bißchen mitdenken darf ja wohl erwartet werden, anderenfalls hätte eine weitere Nachfrage auch niemandem einen Zacken aus der Krone gebrochen.
-
also wenn ich das richtig verstanden habe kann ich mit CreateProcess das Programmstarten und die PROCESS_INFORMATION Structur auswerten.
Jetzt die Frage, wie kann ich alle Fenster für diesen Prozess auflisten. Ich gehe nicht davon aus das dies direkt geht. Ich denke ich muss alle Fenster von hand durchsuchen und mit GetWindowThreadProcessId überprüfen obs zu dem Prozess gehört. Wäre meines erachtens der Sauberste weg. Nun aber die Frage, wie krieg ich eine liste der Fenster oder ähnliches. Hab noch keinen Api Call dafür gefunden.
-
Ist EnumWindows für deine Zwecke denn nicht ausreichend?
-
EnumWindows
in Deinem Fall ist evtl.
EnumThreadWindows
das Richtige.
-
cool das ist ja noch komfortabler, ich wusste das es irgend so etwas gab aber ich konnte es ned finden.