首页 > 解决方案 > 从 HWND 到应用程序名称

问题描述

我想application.exe从一个窗口句柄中获取应用程序名称(即),该句柄HWND来自.WINEVENTPROCSetWinEventHookEVENT_SYSTEM_FOREGROUND

我已经有了进程 ID 并尝试使用GetModuleFileName它,但我似乎遗漏了一些东西,因为它总是返回一个空字符串。

{
    DWORD processId;
    GetWindowThreadProcessId(hwnd, &processId);
    wchar_t appName[MAX_PATH];
    GetModuleFileName(reinterpret_cast<HMODULE>(processId), appName, MAX_PATH);
    qDebug() << processId << QString::fromWCharArray(appName);
}

这是我试图做的,但我显然不明白一些事情。

标签: c++windows

解决方案


GetModuleFileName(reinterpret_cast<HMODULE>(processId), ...);

一点都不正确。进程 ID 不是一个HMODULE,也不能像这样被强制转换为一个。

您需要做的是将进程 ID 传递给OpenProcess()请求PROCESS_QUERY_LIMITED_INFORMATION访问权限。如果成功,您可以使用QueryFullProcessImageName()HANDLE函数返回的那个。


推荐阅读