Einzelnen Beitrag anzeigen

NicoDE
(Gast)

n/a Beiträge
 
#3

Re: prozess-handle --> dateiname

  Alt 17. Mär 2004, 00:13
Zitat von dde:
wie kann ich durch den prozess-handle den dateinamen des prozesses herausbekommen?
Das ist nicht gerade trivial. Die Prozess-ID wäre wesentlich hilfreicher.

Ab Windows XP gäbe es diese Möglichkeit...
(hat den Vorteil, dass man 'nur' PROCESS_QUERY_INFORMATION benötigt - statt PROCESS_QUERY_INFORMATION und PROCESS_VM_READ für GetModuleFilenameEx)
Delphi-Quellcode:
// requires PROCESS_QUERY_INFORMATION (and Windows XP)
function GetProcessImageFileName(Process: THandle): string;
type
  TFNGetProcessImageFileNameA = function(Process: THandle; ImageFileName: LPSTR;
    Size: DWORD): DWORD; stdcall;
const
  Size = MAX_PATH;
var
  PsApiModule: HMODULE;
  GetProcessImageFileNameA: TFNGetProcessImageFileNameA;
begin
  Result := '';
  PsApiModule := LoadLibrary('psapi.dll');
  if (PsApiModule <> 0) then
  try
    GetProcessImageFileNameA := TFNGetProcessImageFileNameA(
      GetProcAddress(PsApiModule, 'GetProcessImageFileNameA'));
    if not Assigned(GetProcessImageFileNameA) then
      SetLastError(ERROR_CALL_NOT_IMPLEMENTED)
    else
    begin
      SetLength(Result, Size + 1);
      SetLength(Result, GetProcessImageFileNameA(Process, PChar(Result), Size));
    end;
  finally
    FreeLibrary(PsApiModule);
  end;
end;
...wobei das Ergebnis möglicherweise nicht ganz Deinen Erwartungen entsprechen wird (zum Beispiel: '\Device\HarddiskVolume6\borland\Delphi6\Projects\ Project1.exe')
  Mit Zitat antworten Zitat