我需要从PID中获取完整路径。
我已经检查了这个问题C++ Windows - How to get process path from its PID 我写了以下代码:
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;
但始终返回此消息:
无法找到指定的模块
如何从PID中获取完整路径?
答案 0 :(得分:17)
您需要使用GetModuleFileNameEx
功能。来自MSDN:
GetModuleFileName 功能
检索 文件的完全限定路径 包含指定的模块。 该模块必须已加载 当前的过程。
找到该模块的文件 被另一个进程加载,使用 GetModuleFileNameEx函数。
示例用法(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;