Tôi đã tạo ra chức năng này để có được những con đường của các quá trình mạng khác nhau, như svchost, Firefox, vv Đây là mã:Không nhận được con đường của các quá trình hệ thống khác nhau bằng cách GetModuleFileNameEx()
function GetProcessPath(var pId:Integer):String;
var
Handle: THandle;
begin
Result := '';
try
Handle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, pID);
if Handle <> 0 then
begin
try
SetLength(Result, MAX_PATH);
if GetModuleFileNameEx(Handle, 0, PChar(Result), MAX_PATH) > 0 then
SetLength(Result, StrLen(PChar(Result)))
else
Result := '';
finally
CloseHandle(Handle);
end;
end;
except
on E:Exception do
ShowMessage(E.ClassName + ':' + E.Message);
end;
end;
Vấn đề của tôi là rằng tôi không có được con đường của tất cả các quy trình. Nó hoạt động tốt để nhận được đường dẫn của Firefox và các quy trình cấp người dùng tương tự khác. Nhưng đối với các quá trình như alg, Svchost, tôi không thể có được con đường bằng phương pháp này. Tôi đoán là tôi phải sử dụng một số API khác nhau. Làm cách nào để khắc phục sự cố này?
Tôi đang sử dụng Windows XP, 32 bit.
Cảm ơn rất nhiều mã, nó hoạt động đẹp – CyprUS
+1 @CyprUS Hãy cẩn trọng với vấn đề của UAC nếu bạn định hỗ trợ Vista trở lên. –