Hmm, ich glaube, ich hab oben was Falsches gesagt. Ich glaub, ich habe die ThreadID doch nicht. Ich schreib mal auf, wie ich denk, wie man die ThreadID über den Namen und Pfad der ausführbaren Datei kommt.
1. Erstellung eines System-Snaphshots mit
CreateToolhelp32Snapshot
2. Ermittlung der ProcessID aller Prozesse über
Process32First und
Process32Next mit dem angegebenen Dateinamen.
3. Ausführen von
Module32First und
Module32Next. Vergleich jeder ProcessID mit der Liste der ProcessIDs von 2. Wenn ID übereinstimmt, heißt das, der Name des ausgeführten Programms ist gleich. Dann mit Hilfe von
szExePath die endgültig gesuchte ProcessID herausfinden.
4. Ausführen von
Thread32First und
Thread32Next. Sichern aller ThreadIDs, die als
th32OwnerProcessID die ProcessID von 3 haben. Somit hat man die ThreadIDs aller Threads des gewünschten Prozesses.
5. Mit
EnumThreadWindows die Fenster aller Threads durchgehen, solange, bis das Hauptformular gefunden wurde.
Problem: Wie kann man dieses erkennen?
6. Nun hat man das Fensterhandle und kann mit diesem machen, was man will
Ist nur ein reichlich komplizierter (zumindest für nen
WinAPI-Anfänger) Weg. Gibts einen einfacheren Weg?
Eine Verkürzung wäre, wenn man den Hauptthread herausfinden könnte. Dann müsste man bei 5 nur einmal das EnumThreadWindow-Gedingsel durchgehen. Dazu wichtig die Frage: In einem Prozess mit mehreren Threads, ist das Hauptfenster überhaupt immer in dem Hauptthread? Bzw. gibt es eigentlich einen Hauptthread und davon abgeleitete Threads oder kann es mehrere "Hauptthreads" geben?
Fragen über Fragen, wäre schön, wenn mir jemand darauf Korrekturen, Tips oder was auch immer geben könnte.
Nur mal so nebenbei: Die theoretische Vorgehensweise hab ich mit Hilfe des Windows
SDK und den Antworten hier von
jbg entwickelt und das ist die beste Lernmethode. Das in Code umzusetzen ist zweitrangig.