AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi EXE-/Modulname aus Fensterhandle ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

EXE-/Modulname aus Fensterhandle ermitteln

Ein Thema von Marphy · begonnen am 8. Jun 2005 · letzter Beitrag vom 16. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#1

EXE-/Modulname aus Fensterhandle ermitteln

  Alt 8. Jun 2005, 18:50
Hallo zusammen,
meine Frage (diesmal ganz kurz ):
Wie kann ich aus einem beliebigen, existierenden Fensterhandle [ IsWindow(MyHandle) = True ] dessen vollständigen EXE-/Modul-Dateinamen ermitteln?

Dass dies mit GetModuleFileName zu lösen ist, ist mit klar. Ich weiß nur nicht, wie man aus der hWnd das Instanzen-/Modul-Handle hInstance (bzw. hModule, ist das gleiche?) ermitteln kann.

Ich hoffe, ihr könnt mir da (mal wieder ) helfen...

Gruß, Marco
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#2

Re: EXE-/Modulname aus Fensterhandle ermitteln

  Alt 8. Jun 2005, 18:56
Warum nimmst du nicht einfach GetWindowModuleFileName?

ciao, Philipp
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

Re: EXE-/Modulname aus Fensterhandle ermitteln

  Alt 8. Jun 2005, 19:06
weil er gerade gesagt hat, dass er nicht versteht, wie er es nutzen soll?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: EXE-/Modulname aus Fensterhandle ermitteln

  Alt 8. Jun 2005, 19:15
Zitat von DGL-luke:
weil er gerade gesagt hat, dass er nicht versteht, wie er es nutzen soll?
Lies lieber nochmal. Es wurde eine komplett andere API vorgeschlagen

Will sagen: Die Aussage von c113plpbr ist vollkommen zutreffend.
  Mit Zitat antworten Zitat
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#5

Re: EXE-/Modulname aus Fensterhandle ermitteln

  Alt 8. Jun 2005, 19:16
Zitat von DGL-luke:
weil er gerade gesagt hat, dass er nicht versteht, wie er es nutzen soll?
er weis nur nicht wie man GetModuleFileName benutzt, aber mit GetWindowModuleFileName könnte er es relativ einfach verstehen ... da seine frage sich ja eigentlich darauf bezog, wie man von einem fensterhandle über ein modulhandle zum Dateinamen kommt. Mit der von mir vorgeschlagenen Funktion fällt dieser Umweg weg.

[edit2]so, jetzt aber[/edit2]

ciao, Philipp
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  Mit Zitat antworten Zitat
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#6

Re: EXE-/Modulname aus Fensterhandle ermitteln

  Alt 8. Jun 2005, 19:19
Habe ich auch schon versucht, funktioniert aber irgendwie nicht (SetForeground mit der selben hWnd aber schon, außerdem erst ab NT SP3)...

Gruß, Marco
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: EXE-/Modulname aus Fensterhandle ermitteln

  Alt 8. Jun 2005, 19:20
oha, ja, sorry. da hab ich mich verlesen...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#8

Re: EXE-/Modulname aus Fensterhandle ermitteln

  Alt 8. Jun 2005, 19:23
Zitat von Marphy:
Habe ich auch schon versucht, funktioniert aber irgendwie nicht (SetForeground mit der selben hWnd aber schon, außerdem erst ab NT SP3)...
GWL_HINSTANCE und GetWindowLong() sind deine Freunde. Hilft allerdings nicht viel, weil das Instanzenhandle in deinem Prozess vermutlich genau deine EXE identifiziert.
  Mit Zitat antworten Zitat
Benutzerbild von c113plpbr
c113plpbr

Registriert seit: 18. Nov 2003
Ort: localhost
674 Beiträge
 
Delphi 2005 Professional
 
#9

Re: EXE-/Modulname aus Fensterhandle ermitteln

  Alt 8. Jun 2005, 20:52
Zitat von Olli:
GWL_HINSTANCE und GetWindowLong() sind deine Freunde. Hilft allerdings nicht viel, weil das Instanzenhandle in deinem Prozess vermutlich genau deine EXE identifiziert.
Dazu gibts ja eigentlich GetModuleFilenameEx, allerdings akzeptiert das dieses Handle nicht ... warum auch immer ... daher empfehle ich die untenstehende lösung ...
Zitat von Marphy:
Habe ich auch schon versucht, funktioniert aber irgendwie nicht
Seltsam ... na dann probier mal das:
Delphi-Quellcode:
uses PsApi;

(*...*)

var
  hwnd_ : HWND;
  PID : Cardinal;
  hProc : Cardinal;
  Buffer : array[0..MAX_PATH - 1] of Char;
  modules : array of HModule;
  modulecount : cardinal;
begin
  hwnd_ := FindWindow('Notepad', nil);

  GetWindowThreadProcessId(hwnd_, PID);
  hProc := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);

  EnumProcessModules(hProc, nil, 0, modulecount);
  SetLength(modules, modulecount div SizeOf(HModule));
  EnumProcessModules(hProc, PDWord(@modules[0]), modulecount, modulecount);

  GetModuleFilenameEx(hProc, modules[0], @Buffer[0], MAX_PATH);

  ShowMessage(string(Buffer));

  CloseHandle(hProc);
end;
Is natürlich auch wieder NT-only ... aber wenn das auch ned funktioniert, dann schau mal, ob es nicht von irgendwas geblockt wird ... z.B. ZoneAlarm tut das manchmal ganz gern ... ^^

Und unter 9x-Systemen solltest du über GetWindowThreadProcessId die PID rausfinden können, und über CreateToolhelp32Snapshot, Process32First & Process32Next sämtliche Prozesse auflisten können. Du müsstest dann nurnoch die PID's vergleichen, und wenn du dann die richtige gefunden hast, einfach in szExeFile den Namen nachschauen ...

ciao, Philipp
Philipp
There is never enough time to do all the nothing you want.
*HABENWILL*
  Mit Zitat antworten Zitat
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#10

Re: EXE-/Modulname aus Fensterhandle ermitteln

  Alt 10. Jun 2005, 22:11
Hallo zusammen,
danke für eure Bemühungen!

Mit GetModuleFileName() funktioniert es nach wie vor nicht, sehr wohl aber mit GetModuleFileNameEx und einem vorgeschobenen OpenProcess.
OpenProcess muss mit Zugriff PROCESS_QUERY_INFORMATION or PROCESS_VM_READ aufgerufen werden - hatte Letzteren bisher weggelassen, aber ohne ihn hat dat Janze dann eben nich funktioniert )

Gruß, Marco
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 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