gpt4 book ai didi

C++ Win32 - 使用 PID 和可执行路径获取应用程序名称

转载 作者:行者123 更新时间:2023-12-02 22:31:06 30 4
gpt4 key购买 nike

我想获取 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:

图像名称:chrome.exe PID:84 session 名称:控制台

我真的很感激任何关于此事的想法,无论是 Win32 API 还是我可以通过 C++ 代码实现的其他方式。

最佳答案

您可以使用 GetFileVersionInfoA 执行此操作和 VerQueryValueA .

您只需按照VerQueryValueA 文档中给出的示例进行操作即可。

这是我的示例:

struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *lpTranslate;

int main()
{
HANDLE handle = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION , FALSE, 2140); //Modify pid to the pid of your application
if (!handle) return 0;
wchar_t pszFile[MAX_PATH] = L"";
DWORD len = MAX_PATH;
QueryFullProcessImageName(handle, 0, pszFile, &len);
UINT dwBytes, cbTranslate;
DWORD dwSize = GetFileVersionInfoSize(pszFile, (DWORD*)&dwBytes);
if (dwSize == 0) return 0;
LPVOID lpData = (LPVOID)malloc(dwSize);
ZeroMemory(lpData, dwSize);
if (GetFileVersionInfo(pszFile, 0, dwSize, lpData))
{
VerQueryValue(lpData,
L"\\VarFileInfo\\Translation",
(LPVOID*)&lpTranslate,
&cbTranslate);
wchar_t strSubBlock[MAX_PATH] = { 0 };
wchar_t* lpBuffer;

for (int i = 0; i < (cbTranslate / sizeof(struct LANGANDCODEPAGE)); i++)
{
StringCchPrintf(strSubBlock,50,
L"\\StringFileInfo\\%04x%04x\\FileDescription",
lpTranslate[i].wLanguage,
lpTranslate[i].wCodePage);
VerQueryValue(lpData,
strSubBlock,
(void**)&lpBuffer,
&dwBytes);
std::wcout << lpBuffer << std::endl;
}
}
if(lpData) free(lpData);
if (handle) CloseHandle(handle);
return 0;
}

它对我有用:

enter image description here

关于C++ Win32 - 使用 PID 和可执行路径获取应用程序名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64321036/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com