Einzelnen Beitrag anzeigen

Lasse2002

Registriert seit: 29. Nov 2004
79 Beiträge
 
RAD-Studio 2009 Pro
 
#2

Re: Code funktioniert mit WindowsXP, nicht mit WindowsXP 64

  Alt 14. Dez 2008, 14:13
Mit GetProcessImageFileName funktioniert es auch mit 64bit Prozessen. Statt SizeOf(buffer1) solltest du unbedingt Length(buffer1) schreiben, dann geht es auch mit Delphi 2009 und neuer.

Delphi-Quellcode:
function GetProcessImageFileName( // ab XP
  hProcess: tHANDLE;
  lpImageFileName: LPTSTR;
  nSize: DWORD): DWORD; stdcall; external 'psapi.dllname 'GetProcessImageFileName'+{$IFDEF UNICODE}'W'{$ELSE}'A'{$ENDIF};

function GetProcessFilePath(pid:cardinal):string;
var
  hp: THandle;
  Buffer1: array[0..MAX_PATH] of Char;
  Len: DWORD;
begin
  Result := '';

  if pid > 0 then
  begin
    hp := OpenProcess(PROCESS_QUERY_INFORMATION, False, pid);
    if hp > 0 then
      try
        Len := GetProcessImageFileName(hp, buffer1, Length(buffer1));
        if Len > 0 then
          Result := Copy(buffer1, 1, Len)
        else
          Result := SysErrorMessage(GetLastError);
      finally
        CloseHandle(hp);
      end;
  end;
end;
Lasse
  Mit Zitat antworten Zitat