从 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);

这将解决您的问题