从 HWND 到应用程序名称

From HWND to application name

本文关键字:应用程序 HWND      更新时间:2023-10-16

我想获取应用程序名称(即 application.exe ) 来自窗口句柄HWND,该句柄来自EVENT_SYSTEM_FOREGROUNDSetWinEventHook钩子的WINEVENTPROC回调。

我已经有了进程 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);
}

这是我试图做的,但我显然不明白什么。

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

完全不正确。进程 ID 不是HMODULE,不能强制转换为这样的进程 ID。

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