c - C中如何根据hwnd获取进程名
问题描述
编程语言: C
Objective:根据当前hwnd获取进程id和name。
当前代码:
HWND hwnd;
DWORD process_ID;
PWSTR process_name = NULL;
hwnd = GetForegroundWindow();
process_ID = GetWindowThreadProcessId(hwnd,&process_ID)
process_name = ????
我不确定我是否将参数正确传递给函数 GetWindowThreadProcessId。我在 Internet 上发现可以使用 GetModuleFileNameW 来获取进程名称,但我无法理解文档。如果太容易解决,请见谅。我从 C 的世界开始。在此先感谢
解决方案
的返回值GetWindowThreadProcessId()
是线程ID,而不是进程ID,因此不要将该返回值分配给您的process_ID
变量,否则它将覆盖参数输出的值lpdwProcessId
。
HWND hwnd = GetForegroundWindow();
DWORD process_ID = 0;
if (GetWindowThreadProcessId(hwnd, &process_ID))
{
// get the process name ...
}
else
{
// error handling ...
}
获得进程 ID 后,您可以将其传递OpenProcess()
给HANDLE
正在运行的进程,然后将其HANDLE
与GetModuleFileNameEx()
( GetProcessImageFileName()
XP+) 或QueryFullProcessImageName()
(Vista+) 一起使用以获取该进程的 EXE 文件的完整路径和文件名:
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, process_ID);
if (hProcess)
{
WCHAR process_name[MAX_PATH] = {};
if (GetModuleFileNameExW(hProcess, NULL, process_name, MAX_PATH))
{
// use process_name as needed...
}
else
{
// error handling ...
}
CloseHandle(hProcess);
}
else
{
// error handling ...
}
HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, process_ID);
if (hProcess)
{
WCHAR process_name[MAX_PATH] = {};
if (GetProcessImageFileNameW(hProcess, process_name, MAX_PATH))
{
// use process_name as needed...
}
else
{
// error handling ...
}
CloseHandle(hProcess);
}
else
{
// error handling ...
}
HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, process_ID);
if (hProcess)
{
WCHAR process_name[MAX_PATH] = {};
DWORD size = MAX_PATH;
if (QueryFullProcessImageNameW(hProcess, 0, process_name, &size))
{
// use process_name as needed...
}
else
{
// error handling ...
}
CloseHandle(hProcess);
}
else
{
// error handling ...
}
推荐阅读
- vue.js - 如何在 nginx + vue.js 中显示自定义 500 页面?
- git - gitconfig shell-command 别名从顶层而不是当前目录运行
- string - 用于选择具有最新日期且不带子字符串的文件名的 Bash 脚本
- mysql - NodeJs 同步 MYSQL 查询和 Foreach
- node.js - 在控制器的“续集”中使用模型
- c# - 属性更改未在任务内触发
- c - 如何从C中的链表中删除特定节点?
- objective-c - Xcode 错误:无法创建目录“/[PATH_TO_APP]/[APP_NAME].app”(在项目“[PROJECT]”的目标“[TARGET]”中)
- python - PyQt5 中的标签自动换行不占用空间
- azure-data-factory-2 - 将多个文件加载到 ADLS 时如何执行数据块笔记本