Otra cosa, acabo de ver que tenes un error importante
El error mas tipico y tonto de la programacion al programar en Windows:
No chequear los errores
En tu codigo lo
intentas hacer, pero mal
Las funciones de la API de Windows devuelven 0 para indicar que no hay error, y distinto de 0 indicando que hay error; donde el codigo retornado corresponde al codigo de error
Código Delphi
[-]
function GetPathFromPID(const PID: cardinal): string;
var
hProcess: THandle;
path: array[0..MAX_PATH - 1] of char;
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);
if hProcess <> 0 then
try
if GetModuleFileNameEx(hProcess, 0, path, MAX_PATH) <> 0 then RaiseLastOSError;
result := path;
finally
CloseHandle(hProcess)
end
else
RaiseLastOSError;
end;
La pregunta de la version de Delphi es por el tema del Unicode. A partir de Delphi 2009, el tipo string es un alias de UnicodeString. Antes eran AnsiString y habia que realizar conversiones explicitas a Unicode (en algunos casos obviamente)