通过Windows进程ID获取窗口句柄
来源:互联网 发布:营养配餐软件 编辑:程序博客网 时间:2024/05/30 05:17
通过Windows进程ID获取窗口句柄
方法一:使用EnumWindows的方式
///< 枚举窗口参数typedef struct{ HWND hwndWindow; // 窗口句柄 DWORD dwProcessID; // 进程ID}EnumWindowsArg;///< 枚举窗口回调函数BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam){ EnumWindowsArg *pArg = (EnumWindowsArg *)lParam; DWORD dwProcessID = 0; // 通过窗口句柄取得进程ID ::GetWindowThreadProcessId(hwnd, &dwProcessID); if (dwProcessID == pArg->dwProcessID) { pArg->hwndWindow = hwnd; // 找到了返回FALSE return FALSE; } // 没找到,继续找,返回TRUE return TRUE;}///< 通过进程ID获取窗口句柄HWND CProcessTimeRestart::GetWindowHwndByPID(DWORD dwProcessID){ HWND hwndRet = NULL; EnumWindowsArg ewa; ewa.dwProcessID = dwProcessID; ewa.hwndWindow = NULL; EnumWindows(EnumWindowsProc, (LPARAM)&ewa); if (ewa.hwndWindow) { hwndRet = ewa.hwndWindow; } return hwndRet;}
方法二:使用GetTopWindow和GetNextWindow的方式
///< 通过进程ID获取窗口句柄HWND CProcessTimeRestart::GetWindowHwndByPorcessID(DWORD dwProcessID){ DWORD dwPID = 0; HWND hwndRet = NULL; // 取得第一个窗口句柄 HWND hwndWindow = ::GetTopWindow(0); while (hwndWindow) { dwPID = 0; // 通过窗口句柄取得进程ID DWORD dwTheardID = ::GetWindowThreadProcessId(hwndWindow, &dwPID); if (dwTheardID != 0) { // 判断和参数传入的进程ID是否相等 if (dwPID == dwProcessID) { // 进程ID相等,则记录窗口句柄 hwndRet = hwndWindow; break; } } // 取得下一个窗口句柄 hwndWindow = ::GetNextWindow(hwndWindow, GW_HWNDNEXT); } // 上面取得的窗口,不一定是最上层的窗口,需要通过GetParent获取最顶层窗口 HWND hwndWindowParent = NULL; // 循环查找父窗口,以便保证返回的句柄是最顶层的窗口句柄 while (hwndRet != NULL) { hwndWindowParent = ::GetParent(hwndRet); if (hwndWindowParent == NULL) { break; } hwndRet = hwndWindowParent; } // 返回窗口句柄 return hwndRet;}
通过以上两种窗口获得的句柄,和使用FindWindow获得的句柄是一样的。
可以通过SendMessage向窗口发送消息
HWND hwnd = ::FindWindow(NULL, "Test");::SendMessage(hwnd, WM_CLOSE, 0, 0);
1 0
- 通过Windows进程ID获取窗口句柄
- 通过进程Id获取窗口句柄
- 通过进程id获取窗口句柄
- 通过进程ID获取进程主窗口句柄
- 通过进程ID获取最顶层窗口句柄
- 通过进程名或进程ID获取进程句柄,窗口句柄
- 通过进程ID找到窗口句柄
- 通过进程ID获得主窗口句柄
- 通过进程ID获得主窗口句柄
- VC由进程ID获取窗口句柄
- 根据窗口句柄来获取进程ID
- 根据进程id获取主窗口句柄
- Windows 下 根据进程名获取进程ID 以及该进程下所有窗口的句柄
- 通过进程获取窗口的句柄
- 通过进程获取窗口的句柄
- 通过进程exe名称获取窗口句柄
- 通过进程名获取窗口句柄
- 通过创建窗口进程的ID来查找窗口句柄
- HDU 5952 Counting Cliques(我对暴力的理解还是不狗)
- Oracle字符集的查看查询和Oracle字符集的设置修改
- BZOJ 2796: [Poi2012]Fibonacci Representation
- 删除链表中倒数第n个节点
- idea 把一个add到git的文件去掉
- 通过Windows进程ID获取窗口句柄
- Filter过滤器
- 搭建自己的volley网络请求框架
- 我对补码的理解
- Camel In Action 第五章 错误处理
- 第九周OJ(6)第几天
- JavaScript实现tab效果图
- 《ImageEffects(屏幕特效)官方文档翻译》——编写屏幕特效【Writing Image Effects】
- 【那些年关于MyEclipse的快捷键大全】