![]() |
Handle ermitteln
Hi Leute,
habe mal eine Frage zu FindWindow: Ist es irgendwie möglich, die Funktion mittels eines Dateinamen anstatt lpClassName aufzurufen? Gibt es dafür eine andere Funktion, wie ich das Handle eines Programms mittels seines Dateinamen herausfinden kann? z.B. wenn ich eingebe:
Delphi-Quellcode:
dann klappt das wunderbar.
FindWindow('notepad',nil)
Wenn ich aber z.B. das Handle vom Windows Media Player haben will:
Delphi-Quellcode:
oder
FindWindow('wmplayer',nil)
Delphi-Quellcode:
funktioniert nicht.
FindWindow('Windows Media Player',nil)
Deshalb wollte ich es über den FileName machen, aber da komme ich nicht weiter... :gruebel: |
Re: Handle ermitteln
Hallo,
Bei mir findet es den MP so:
Delphi-Quellcode:
FindWindow('WMPlayerApp','Windows Media Player');
Zitat:
Zudem koennen zu einem Prozess mehrere Fenster gehoeren. Dann muesstest du noch das richtige finden. |
Re: Handle ermitteln
Danke erstmal, werd ich gleich ausprobieren.
Ich wollte es halt nur allgemein, also für JEDES Programm machen, deshalb über FileName... |
Re: Handle ermitteln
Zitat:
Meinetwegen kann der ganze Prozess beendet werden. Wie würde das denn gehen? Also Handle eines Prozesses erhalten ??? |
Re: Handle ermitteln
Zitat:
Was genau moechtest du mit den Handles machen? |
Re: Handle ermitteln
Also:
Ich starte zunächst ein Programm per ShellExecute. Dieses Programm läuft im Hintergrund, also SW_Hide. Da der Nutzer deshalb dieses Programm dann nur im Taskmanager beenden kann, will ich es eben so beenden:
Delphi-Quellcode:
Da das Programm im Normalfall der Windows Media Player ist, funzt der Code auch.
PostMessage(FindWindow('WMPlayerApp','Windows Media Player'),WM_SYSCOMMAND,SC_Close,0);
Der Benutzer soll aber das Programm auch ändern können (also ein anderes Programm für die Musikwiedergabe), und eben dann habe ich ein Problem mit dem Beenden... Zitat:
|
Re: Handle ermitteln
Kannst du nicht über
![]() |
Re: Handle ermitteln
Ich will das Programm schon "ordentlich" beenden, also nicht killen.
Ich weiß zwar nicht, wie CreateProcess funktioniert, aber ich habe das schon ausprobiert: Hab mir eine globale Integer-Variable genommen, in der das Handle meines Prozesses gespeichert wird. Danach wollte ich dann das Programm zu diesem Handle beenden:
Delphi-Quellcode:
Der Code hat aber leider nicht funktioniert...
//Programm starten und Handle speichern
FillChar(Info, SizeOf(Info), 0); Info.cbSize := SizeOf(Info); Info.Wnd := Application.Handle; Info.fMask := SEE_MASK_NOCLOSEPROCESS; Info.lpVerb := PChar('open'); Info.lpFile := PChar('C:\Programme\Windows Media Player\wmplayer.exe'); Info.nShow := SW_Hide; ShellExecuteEx(@Info); x := exInfo.hProcess; //x habe ich als globale Integer-Variable deklariert //dann Beenden: PostMessage(x,WM_SYSCOMMAND,SC_Close,0); |
Re: Handle ermitteln
Ein Prozess-Handle ist ja auch kein Fensterhandle.
Also damit es mit einem Dateinamen funktioniert: 1. Alle Prozesse auflisten (Forensuche) 2. Die dazugehörigen ProzssIDs und Dateinamen holen 3. Alle Fenster(handles) holen (Forensuche) 4. Vergleichen welches Handle zur ProzessID passt mit ![]() |
Re: Handle ermitteln
Schaut euch mal
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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