Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hwnd find durch EXE-name, wie? (https://www.delphipraxis.net/71349-hwnd-find-durch-exe-name-wie.html)

Amnon82 13. Jun 2006 16:48


Hwnd find durch EXE-name, wie?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab einen meiner Programmcodes zu einem kleinen Demo-Programm zusammengestellt.

Es hat ein Test-Programm und das eigentliche Programm.
Sinn dahinter ist, zwei Progressbars im eigentlichen Programm zu dublizieren, sprich
die Werte des Test-Programms zu übernehmen.

Das HWnd finde ich über FindWindowByTitle.

Nun möchte ich aber das HWnd auch per EXE-Name finden.
Nur weis ich nicht wie.

Folgenden Code hab ich so gefunden:

Delphi-Quellcode:
Uses JCLSYSINFO
...
var PID : DWORD;
begin
  //Hwnd := FindWindowbytitle('Titel_der_EXE');
  PID := GetPidFromProcessName('Name_der.exe');
  Hwnd := GetMainAppWndFromPid(PID);
  if Hwnd <> 0
  then
   //tu was
end;
Leider benötigt dann das Programm 100% CPU

Gibt es ne Lösung?

SirThornberry 13. Jun 2006 16:53

Re: Hwnd find durch EXE-name, wie?
 
eine EXE kann kann mehrere Fenster/Forms etc. beinhalten und kann somit auch mehrere FensterHandles haben. Somit kann man nicht einfach von einer gestarteten Exe das Handle ermitteln (zumal eine Exe auch mehfach zu starten geht)

Amnon82 13. Jun 2006 17:26

Re: Hwnd find durch EXE-name, wie?
 
K, man kann sie mehrmals starten. Wenn ich aber nur das Handle vom Hauptfenster brauche? Müsste doch gehen.

Bei FindWindowByTitle kann es auch passieren, dass sich mein Programm versemmelt, wenn ich nur nach '%' im Titel suche.
Ist die einzige Konstante bei dem aktiven Fenster, was ich suche (CCE während dem Encodieren).

Da dachte ich, ich könnte es auch über die EXE lösen, da ich dort nur eine starte.

'%' können auch andere Fenster im Titel haben. Wollte das vermeiden.

Oder kann man über das Handle die EXE ermitteln, um gegenzuprüfen, ob man auch das richtige Fenster erwischt hat?

SirThornberry 13. Jun 2006 17:31

Re: Hwnd find durch EXE-name, wie?
 
du könntest dir alle Fenster auflisten lassen welche zu einer bestimmten Exe gehören, aber wie gesagt ist das dann nicht nur ein Fenster und du müsstest aus den gefundenen Fenstern dann noch richtige heraus suchen.

mit CreateToolhelp32Snapshot, Process32First etc. kannst du dir alle Prozesse auflisten lassen und die ProzessID dieser Prozesse mit der ProzessID des Fensters vergleichen (zu welcher ProzessID ein Fenster gehört kannst du mit GetWindowThreadProcessId ermitteln)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 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