c++ - C++ Win API - FindWindow() 或 EnumWindows() 检索特定窗口
问题描述
从特定窗口检索窗口句柄时遇到以下问题(标题和类名已知):
在两个不同的进程下有两个具有不同句柄的相同窗口,但FindWindow()
只能从产生的最新窗口中找到句柄,而不是从第一个窗口中找到句柄。
可以用什么代替?可以EnumWindows()
用来检索具有相同特征的窗口列表吗?
解决方案
使用 Win32 API EnumWindows
,然后使用 Win32 API 检查每个窗口属于哪个进程GetWindowThreadProcessId
。
这是一个示例:
#include <iostream>
#include <Windows.h>
using namespace std;
BOOL CALLBACK enumProc(HWND hwnd, LPARAM) {
TCHAR buf[1024]{};
GetClassName(hwnd, buf, 100);
if (!lstrcmp(buf, L"Notepad"))
{
GetWindowText(hwnd, buf, 100);
DWORD pid = 0;
GetWindowThreadProcessId(hwnd, &pid);
wcout << buf << " " << pid << endl;
}
return TRUE;
}
int main() {
EnumWindows(&enumProc, 0);
}
如果需要查看各个进程的窗口,可以参考这个答案。
推荐阅读
- batch-file - 定期运行 youtube-dl
- r - 显示 NA 值 + 更改颜色范围 | R中的ggplot2
- c# - 是否可以在解决方案中为单个项目创建 Nuget 包?
- xcode - Xcode 未在 Commit (GitHub) 上显示我的一些视图控制器
- spring - 如何使用来自 http://developer.nytimes.com 的 Spring Boot 获取当前最热门的故事
- html - 子 div 是可滚动的,但在子元素中添加内容时,主体的高度仍然会增加
- c# - 仅显示一次 Gameobject 统一
- android - Android:滚动时不调用 OnbindViewHolder
- reactjs - 为什么 react-native start 命令停留在“加载依赖关系图,完成”上。
- html - CSS - 添加文本时导航栏变得不模糊