我需要从PID获得完整路径.
我已经检查了这个问题C++ Windows - 如何从其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;
Run Code Online (Sandbox Code Playgroud)
但总是返回此消息:
指定的模块无法找到
如何从PID中获取完整路径?
And*_*and 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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12066 次 |
| 最近记录: |