【发布时间】:2020-10-12 15:45:14
【问题描述】:
我想获取 Windows 上的应用程序的名称。
目前我正在使用EnumProcesses() 枚举所有进程并接收 PID 列表。
然后我循环遍历所有 PID,每次迭代看起来像这样,当 aProcess[i] 是当前 PID:
HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, aProcesses[i]);
std::string processName = get_process_name(proc);
我的get_process_name(proc) 函数使用GetModuleFileNameEx 来获取可执行文件路径,并使用GetProcessImageFileName 来检索可执行文件的名称。
我要检索的基本上是应用程序名称,因为它显示在 Windows 任务管理器中。
我查看了整个 Win32 API 的文档,但找不到有关如何实现此目的的线索。 我尝试寻找其他方式,例如 Windows Shell 任务列表,但它输出不同的东西,例如 - Google Chrome:
Image Name: chrome.exe PID: 84 Session Name: Console
我非常感谢您对此事的任何想法,无论是 Win32 API 还是我可以通过 C++ 代码实现的其他方式。
【问题讨论】:
-
您在寻找this吗?
-
Windows 任务管理器打开 exe 文件并查看它是否有版本信息,如果有 - 阅读 文件描述 并显示它,而不是 exe 的名称
-
打开进程
HANDLEs时,不要请求PROCESS_ALL_ACCESS,你不需要那么多权限。PROCESS_QUERY(_LIMITED)_INFORMATION本身就足够了。另外,请查看QueryFullProcessImageName()。
标签: c++ windows powershell winapi