AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Voller Pfad einer Anwendung anhand Handle
Thema durchsuchen
Ansicht
Themen-Optionen

Voller Pfad einer Anwendung anhand Handle

Ein Thema von OrallY · begonnen am 5. Aug 2004 · letzter Beitrag vom 12. Sep 2004
Antwort Antwort
Benutzerbild von OrallY
OrallY

Registriert seit: 29. Apr 2003
268 Beiträge
 
#1

Voller Pfad einer Anwendung anhand Handle

  Alt 5. Aug 2004, 18:13
Ich versuche den vollen Pfad einer Anwendung anhand des Handles herauszubekommen. Den Dateinamen kriege ich schon, allerdings nicht den Pfad dazu:


Delphi-Quellcode:
function GetProcessNameFromWnd(hWnd: HWND): string;
var
  ProcID : DWord;
  SSHandle : THandle;
  Continue : boolean;
  ProcEntry : TProcessEntry32;
begin
  GetWindowThreadProcessID(hWnd, @ProcID);
  SSHandle := CreateToolhelp32Snapshot(TH32CS_SnapProcess, 0);
  ProcEntry.dwSize := Sizeof(ProcEntry);
  // gehe alle Prozesse durch
  Continue := Process32First(SSHandle, ProcEntry);
  while Continue do begin
    // gesuchter Prozess (ProcID) in der Liste aller Prozesse gefunden?
    if ProcEntry.th32ProcessID = ProcID then
    begin
      Result := ProcEntry.szExeFile;
      break;
    end;
    Continue := Process32Next(SSHandle, ProcEntry);
  end;
  CloseHandle(SSHandle);
end;
.oO'rallY
Linux is like a tipi: no gates, no windows and a gnu-eating apache inside...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Voller Pfad einer Anwendung anhand Handle

  Alt 5. Aug 2004, 18:27
Unter welchem OS. Dein Code verhält sich unter ConsumerWindows anders als unter NT ff. Aber MSDN-Library durchsuchenGetmodulefilename sollte dein Problem lösen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: Voller Pfad einer Anwendung anhand Handle

  Alt 5. Aug 2004, 20:03
Is´ Motzi da? klick
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#4

Re: Voller Pfad einer Anwendung anhand Handle

  Alt 5. Aug 2004, 20:50
Delphi-Quellcode:
uses
  TlHelp32, PsAPI;

function GetWindowProcessImageFileName(Wnd: HWND): string;
const
  DesiredAccess = PROCESS_QUERY_INFORMATION or PROCESS_VM_READ;
var
  ProcessId: DWORD;
  Snapshot: THandle;
  ModuleEntry: TModuleEntry32;
  Process: DWORD;
  Module: HMODULE;
  Needed: DWORD;
  FileName: array [0..MAX_PATH-1] of Char;
begin
  SetLength(Result, 0);
  ProcessId := 0;
  GetWindowThreadProcessId(Wnd, ProcessId);
  if 0 = ProcessId then
    Exit;

  // Windows 95, Windows 2000
  Snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessId);
  if (Snapshot <> 0) and (Snapshot <> INVALID_HANDLE_VALUE) then
    try
      ModuleEntry.dwSize := SizeOf(TModuleEntry32);
      if Module32First(Snapshot, ModuleEntry) then
        Result := StrPas(ModuleEntry.szExePath);
    finally
      CloseHandle(Snapshot);
    end
  else
  begin
    // Windows NT 4.0
    Process := OpenProcess(DesiredAccess, False, ProcessId);
    if Process <> 0 then
      try
        if EnumProcessModules(Process, PDWORD(Addr(Module)), SizeOf(HMODULE),
          Needed) and (GetModuleFileNameEx(Process, Module, FileName,
          SizeOf(FileName)) > 0) then
          Result := StrPas(FileName);
      finally
        CloseHandle(Process);
      end;
  end;
end;
BTW, das Snapshot-Handle nur auf ungleich INVALID_HANDLE_VALUE abzufragen ist unsicher/falsch, da der Wrapper in der TlHelp32.pas 0 zurückgibt falls die API nicht vorhanden ist.
  Mit Zitat antworten Zitat
Benutzerbild von OrallY
OrallY

Registriert seit: 29. Apr 2003
268 Beiträge
 
#5

Re: Voller Pfad einer Anwendung anhand Handle

  Alt 5. Aug 2004, 21:34
Danke für die vielen brauchbaren Antworten! Thx.
.oO'rallY
Linux is like a tipi: no gates, no windows and a gnu-eating apache inside...
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#6

Re: Voller Pfad einer Anwendung anhand Handle

  Alt 6. Aug 2004, 08:02
@Nico: Warum hast du nicht schon eher mal was gesagt? Ich bin der Meinung, Teile meines o.gp. (oben geposteten ) Codes stammen aus ohnehin deiner Feder.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Voller Pfad einer Anwendung anhand Handle

  Alt 6. Aug 2004, 08:45
Zitat von MathiasSimmack:
@Nico: Warum hast du nicht schon eher mal was gesagt? Ich bin der Meinung, Teile meines o.gp. (oben geposteten ) Codes stammen aus ohnehin deiner Feder.
Hi,

Delphi hätte dir eigentlich ne Warnung ausgeben müssen, dass der Vergleich immer Wahr ergibt, da ein Cardinal (also THandle) immer ungleich -1 (INVALID_HANDLE_VALUE) ist.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#8

Re: Voller Pfad einer Anwendung anhand Handle

  Alt 6. Aug 2004, 10:26
Zitat von MathiasSimmack:
@Nico: Warum hast du nicht schon eher mal was gesagt? Ich bin der Meinung, Teile meines o.gp. (oben geposteten ) Codes stammen aus ohnehin deiner Feder.
Ich habe den Fehler früher selbst begangen

Zitat von mirage228:
Delphi hätte dir eigentlich ne Warnung ausgeben müssen, dass der Vergleich immer Wahr ergibt, da ein Cardinal (also THandle) immer ungleich -1 (INVALID_HANDLE_VALUE) ist.
Es wäre ziemlich sinnlos, wenn eine Konstante mit dem Namen INVALID_HANDLE_VALUE nicht mit THandle zuweisungskompatibel, bzw. vergleichbar wäre...

Gruss Nico
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Voller Pfad einer Anwendung anhand Handle

  Alt 6. Aug 2004, 10:56
Zitat von NicoDE:
Zitat von mirage228:
Delphi hätte dir eigentlich ne Warnung ausgeben müssen, dass der Vergleich immer Wahr ergibt, da ein Cardinal (also THandle) immer ungleich -1 (INVALID_HANDLE_VALUE) ist.
Es wäre ziemlich sinnlos, wenn eine Konstante mit dem Namen INVALID_HANDLE_VALUE nicht mit THandle zuweisungskompatibel, bzw. vergleichbar wäre...

Gruss Nico
Hm, ja, du hast Recht.

Hab grad ma nachgeschaut, und in Delphi7 ist INVALID_HANDLE_VALUE auch ein Cardinal (ehergesagt, -1 zu DWord gecastet), also ist ein Vergleich damit gültig.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Unplugged

Registriert seit: 14. Apr 2004
Ort: Leipzig
125 Beiträge
 
Delphi 6 Enterprise
 
#10

Re: Voller Pfad einer Anwendung anhand Handle

  Alt 12. Sep 2004, 09:15
Zitat:
Delphi-Quellcode:
      if Module32First(Snapshot, ModuleEntry) then
        Result := StrPas(ModuleEntry.szExePath);
Also ich schlage mich jetzt schon länger mit der Lösung von Luckie rum. Und zwar liefert szExeFile laut Definition einen Array. Ich bekomme aber immer nur die exe-datei selbst, ohne den Pfad zu ihr. Aber szExePath steht mir leider auch nicht zur Verfügung?

Edit: Ok es ist früh am morgen ^^ ein Blick in die tlhelp32.pas brachte die Erleuchtung zum szExePath.
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:47 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