delphi

2010-11-14 8 views
11
i PID tam yolunu almak gerekir

kullanarak bir PID tam yolunu almak, ben bu soruyu C++ Windows - How to get process path from its PIDdelphi

kontrol ve ben bu kodu yazdım

function GetFullPathFromPID(PID: DWORD): string; 
var 
    hProcess: THandle; 
    ModName : Array[0..MAX_PATH + 1] of Char; 
begin 
    Result:=''; 
    hProcess := OpenProcess(PROCESS_ALL_ACCESS,False, PID); 
    try 
     if hProcess <> 0 then 
     if GetModuleFileName(hProcess, ModName, Sizeof(ModName))<>0 then 
     Result:=ModName 
     else 
     ShowMessage(SysErrorMessage(GetLastError)); 
    finally 
    CloseHandle(hProcess); 
    end; 
end; 

ama her zaman bu mesajı döndürür

belirtilen modül

bulunamadı olamazdı

Tam yolu bir pid'den nasıl döndürebilirim?

cevap

17

GetModuleFileNameEx işlevini kullanmanız gerekir. MSDN:

GetModuleFileName

belirtilen modül içeren dosyaya için tam olarak nitelenmiş yolunu alır Fonksiyon. Modül, mevcut süreçte tarafından yüklenmiş olmalıdır.

GetModuleFileNameEx işlevini kullanın başka bir işlem tarafından yüklenen bir modül için dosyasını bulmak için.

Örnek kullanım (uses PsAPI):

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;