Entwickler-Ecke

Windows API - Variablen das Handle einer gestarteten Anwendung übergeben?


Swordooo - Sa 12.09.09 17:02
Titel: Variablen das Handle einer gestarteten Anwendung übergeben?
Hallo Delphi-Forum,
Ich habe jetzt schon länger das Problem, dass ich eine ausführbare Datei starten möchte und dann irgendwie das Handle zurückbekommen möchte (HWND). Habe schon seit längerer Zeit im Internet gesucht, jedoch bin ich, wenn ich mal was gefunden habe, nicht beim Code durchgestiegen. Wäre echt sehr nett, wenn ihr mir ein sehr kurzes Beispiel posten könntet, wie ich z.B. notepad.exe starte und dann das Handle (HWND) einer Variablen übergeben wird. Wäre sehr dankbar!

Mit freundlichen Grüßen
Swordooo


Delete - Sa 12.09.09 17:13

Was willst du haben, das Handle des zugehörigen Fensters oder das Prozesshandle? Ersteres bekommst du mit FindWindow zweiteres bekommst du, wenn du den Prozess mit CreateProcess oder ShellexecuteEx startest.


Swordooo - Sa 12.09.09 17:26

Ich möchte gerne das Handle haben, was man ja eigendlich, wie du schon sagtest, mit FindWindow bekommt, jedoch funktioniert das nicht mehr, wenn ich nun z.B. schon >1 Editor (notepad.exe) offen habe, weil dann ja das gleiche Caption und gleicher Prozessname besteht. Nun starte ich mit Delphi einen weiteren Editor, doch ich bekomme wahrscheinlich das falsche Handle :D
MfG


Delete - So 13.09.09 02:15

Dann wirst du wohl irgendwie ein Unterscheidungsmerkmal finden müssen. So spontan fällt mir allerdings auch keins ein.


jaenicke - So 13.09.09 03:18

Bei CreateProcess bekommst du die Thread-ID frei Haus geliefert, damit kannst du danach einfach EnumThreadWindows aufrufen und alle Fenster des Threads durchgehen. Zumindest bei Notepad wird das vermutlich so gehen, ansonsten müsste man alle Fenster durchgehen und schauen welche zu dem entsprechenden Prozess gehören und den richtigen Titel haben.

So wird auch hier z.B. vorgegangen:
http://www.delphi-forum.de/viewtopic.php?p=460553#460553