![]() |
Fensterhandle aus ProcessID?
Hi,
ich will gerne das Fenster eines Programms ToFront bringen. Dafür brauch ich ja ein Handle. Das wiederum kann man ja z.B. über Findwindow bekommen. Allerdings hat das Programm nicht immer denselben Fensternamen/-Titel, weshalb das schonmal wegfällt, da ich diesen Parameter nicht (immer) kenne. Jetz hab ich in der JCL eine Funktion namens "GetApplicationWnd" gefunden, die mir das Handle aufrund der ProzessID wiedergibt. (will ich z.B. Word in den Vordergrund bringen, kann ich mir ne Prozessliste machen, nach Winword.exe suchen, die ProzessID ermitteln und diese dann der JCL- Funktion übergeben). Allerdings hab ich in der Hilfe dazu nachgelesen, dass diese Funktion nur mit Delphi- Anwendungen funktioniert. Und im Windows-SDK hab ich auch keine Funktion gefunden die mir ein Handle anhand der ProzessID übergibt. K, gäbe es noch das Problem, dass wenn ein Prog mehrere Instanzen offen hat, es entweder nur einmal in der Liste steht oder mehrmals derselbe Dateiname. Hm, ich glaub ich hab mich verzettelt. Was ich jedenfalls möchte, ist eine Alternative zu Findwindow, die ein Handle aus einem anderen Parameter ermittelt, weil ich den Fensternamen nicht immer kenne. Danke schonmal, S - tefano |
Schonmal daran gedacht mit dem Klassennamen zu arbeiten..? :roll:
|
Moin Stefano,
Du kannst ja mit EnumWindows alle Top-Level Fenster durchgehen, dann jedes mit IsWindowVisible auf Sichtbarkeit prüfen, und dann mit GetWindowThreadProcessId mit der gewünschten Prozess ID vergleichen, bis Du fündig geworden bist. Müsste eigentlich funktionieren. |
Hi,
irgendwie werd ich aus dem SDK- Eintrag zu EnumWindows nicht schlau. BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // pointer to callback function LPARAM lParam // application-defined value ); Genauer gesagt versteh ich 1. nicht, was ich mit den Parametern anfangen soll bzw. was ich überhaupt übergeben soll (pointer to callback function :!: :?: )# und 2. nicht, was überhaupt ne Callback Funktion ist, und wie ich das Ergebnis von EnumWindows (was wenn ichs richtig verstanden hab ein Handle ist) darin "empfange". Und, EnumWindows gibt mir doch nur ein Handle zurück, oder? Oder gibt es mir ein Handle zurück, dann noch eins, dann noch eins usw. bis es keine TopLevel Windows mehr findet? Und zu GetWindowThreadProcessId: Als ersten Parameter muss ich dann ja das Handle aus EnumWindows zurückgeben (denk ich mal), und als zweiten? Nen Pointer? Oder einfach die Variable, in der nach dem Aufruf das Ergebnis stehen soll (irgendwie werd ich aus diesen SDK- Texten nich so richtig schlau)? und @Motzi: Erklär das bitte nochmal etwas genauer. Versteh nicht ganz wovon du jetz sprichst. Bis dann, S - tefano |
Zu EnumWindows:
![]() |
Moin Stefano,
wenn Du hier im Forum mal nach EnumWindows suchst, müsstest Du einige Fundstellen haben. Soviel vorab: Zitat:
Unter EnumWindowsProc findest Du im PSDK auch, wie die Funktion aussehen muss. (stdcall nicht vergessen ;-) ) Der zweite Parameter von GetWindowThreadProcessId muss die Adresse einer Variablen sein, die die zugehörge Prozessnummer erhält.
Delphi-Quellcode:
var
dwProcID : DWORD; GetWindowThreadProcessId(hWindow,@dwProcID); |
Huiuiuiuiui.
Also der Code, jbg (naja, eigentlich Luckie :wink: ), funktioniert schonmal, was mich sehr freut. Jetz werd ich mir wohl ein bisschen Zeit nehmen müssen den auch zu verstehen... Hätt ja schonmal nich gedacht dass dieses Prinzip, wie es CallbackFunktion geschimpft wird überhaupt existiert geschweigedenn funktioniert... Aber das hilft mir schonmal sehr weiter. Also dann, vielen Dank für die schnelle Hilfe, S - tefano |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz