c++ - 从 HWND 到应用程序名称
问题描述
我想application.exe
从一个窗口句柄中获取应用程序名称(即),该句柄HWND
来自.WINEVENTPROC
SetWinEventHook
EVENT_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);
}
这是我试图做的,但我显然不明白一些事情。
解决方案
GetModuleFileName(reinterpret_cast<HMODULE>(processId), ...);
一点都不正确。进程 ID 不是一个HMODULE
,也不能像这样被强制转换为一个。
您需要做的是将进程 ID 传递给OpenProcess()
请求PROCESS_QUERY_LIMITED_INFORMATION
访问权限。如果成功,您可以使用QueryFullProcessImageName()
从该HANDLE
函数返回的那个。
推荐阅读
- javascript - Javascript 正则表达式延迟量词未按预期工作
- c# - 转动时倾斜第一人称相机的 z 轴
- bash - 替换多个文件中特定行上的非字母数字字符
- sql - SQL - 查找没有阴影的产品 ID,其中包含作为产品 ID 的子字符串
- java - Spring缓存为项目类抛出意外错误
- excel - 生成新工作表时自动使用参考表列中的下一行值
- c++ - c++ 中结构内部的 unordered_map 会导致内存泄漏问题吗?
- django - 在 seed_data.yaml 文件中是否有办法自动生成第一个模型所依赖的模型?
- javascript - JavaScript 的广播频道是否限制为每秒接收一条消息?
- reactjs - react froala wysiwyg-editor 中的图像上传参数