Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Top/Main-Window einer Anwendung (https://www.delphipraxis.net/115767-top-main-window-einer-anwendung.html)

Meta777 17. Jun 2008 17:32


Top/Main-Window einer Anwendung
 
Huhu,
ich muss an das Top/Main-Window einer bestimmten Anwendung kommen. Über FindWindow() gehts leider nicht da die Caption des Fenster variiert. Deswegen frage ich wie ich über die ProcessId der Anwendung an des "oberste" Fenster komme.

Shalom

EDIT: Habe gerade gelesen das es über GetWindowModuleFileName() ab Win2k nicht mehr geht. Aber es muss doch ne Alternative geben??

Meta777 17. Jun 2008 23:37

Re: Top/Main-Window einer Anwendung
 
folgende "Lösung" habe ich jetzt gemacht
-Alle Fenster durchlaufen
-Über das HWnd den Prozess öffnen, Module enumerieren und vom ersten Modul den FileName ermitteln
-wenn der dateiname des fensters mit dem gesuchten übereinstimmt -> in liste speichern
-liste durchlaufen und "kleinstes" HWnd als Result zurückgeben

Ich hoffe jetzt nur das das niedriegwertigste HWnd auch immer des Top Window ist...

Und jetzt viel mir auch auf das man erst die Pid ermitteln könnte und an hand dieser vergleichen könnte...
naja, funkt ja soweit..

Gute NAcht...
:party:

Luckie 18. Jun 2008 08:04

Re: Top/Main-Window einer Anwendung
 
FindWindow hat zwei Parameter. Man muss nicht immer unbedingt den Fenstertitel nehmen.

Apollonius 18. Jun 2008 20:36

Re: Top/Main-Window einer Anwendung
 
Ein Prozess kann beliebig viele Top-Level-Fenster besitzen. Die richtige Lösung wäre, mit den Toolhelp-Funktionen alle Threads des Prozesses aufzuzählen und von denen jeweils mit EnumThreadWindows alle Top-Level-Fenster zu ermitteln.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz