从 Windows 10 中的 运行 个进程获取路径
Get path from running processes in Windows 10
我试图从 Windows 10 中的 运行 个进程获取路径,但没有成功。这是我使用的代码:
procedure GetPathFromProcessList(List: TStringList);
var
Shot: THandle;
Proc: THandle;
Data: TProcessEntry32;
Path: array[0..MAX_PATH - 1] of Char;
begin
Shot := CreateToolHelp32Snapshot(TH32CS_SNAPALL, 0); //TH32CS_SNAPPROCESS
if (Shot <> 0) then
try
List.Sorted := True;
List.Duplicates := dupIgnore;
List.BeginUpdate;
if (Process32First(Shot, Data)) then
repeat
// PROCESS_QUERY_LIMITED_INFORMATION = 00
Proc := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, Data.th32ProcessID);
if (Proc <> 0) then
try
if (GetModuleFileNameEx(Proc, 0, Path, MAX_PATH) <> 0) then
List.Add(LowerCase(Path));
finally
CloseHandle(Proc);
end;
until (not Process32Next(Shot, Data));
List.EndUpdate;
finally
CloseHandle(Shot);
end;
end;
我的应用程序要求提升权限,我已经尝试在 OpenProcess 中使用 PROCESS_QUERY_LIMITED_INFORMATION ($1000),但问题是一样的。
它没有给我任何错误,但是列表在 Windows 10 中是空的。在 Windows 7 中它没有问题...
拜托,有人知道这是怎么回事吗?谢谢!
如果按照MSDN documentation它告诉你需要初始化PROCESSENTRY和MODULEENTRY结构的dwSize成员变量。
你可以轻松做到:
moduleEntry32.dwSize = sizeof(MODULEENTRY32);
这将解决您的问题
我试图从 Windows 10 中的 运行 个进程获取路径,但没有成功。这是我使用的代码:
procedure GetPathFromProcessList(List: TStringList);
var
Shot: THandle;
Proc: THandle;
Data: TProcessEntry32;
Path: array[0..MAX_PATH - 1] of Char;
begin
Shot := CreateToolHelp32Snapshot(TH32CS_SNAPALL, 0); //TH32CS_SNAPPROCESS
if (Shot <> 0) then
try
List.Sorted := True;
List.Duplicates := dupIgnore;
List.BeginUpdate;
if (Process32First(Shot, Data)) then
repeat
// PROCESS_QUERY_LIMITED_INFORMATION = 00
Proc := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, Data.th32ProcessID);
if (Proc <> 0) then
try
if (GetModuleFileNameEx(Proc, 0, Path, MAX_PATH) <> 0) then
List.Add(LowerCase(Path));
finally
CloseHandle(Proc);
end;
until (not Process32Next(Shot, Data));
List.EndUpdate;
finally
CloseHandle(Shot);
end;
end;
我的应用程序要求提升权限,我已经尝试在 OpenProcess 中使用 PROCESS_QUERY_LIMITED_INFORMATION ($1000),但问题是一样的。
它没有给我任何错误,但是列表在 Windows 10 中是空的。在 Windows 7 中它没有问题...
拜托,有人知道这是怎么回事吗?谢谢!
如果按照MSDN documentation它告诉你需要初始化PROCESSENTRY和MODULEENTRY结构的dwSize成员变量。
你可以轻松做到:
moduleEntry32.dwSize = sizeof(MODULEENTRY32);
这将解决您的问题