如何获取一个窗口的句柄
时间: 2024-01-17 09:04:04 浏览: 91
你可以使用Windows API函数FindWindow或FindWindowEx来获取窗口句柄。FindWindow函数可以根据窗口类名或窗口标题来查找窗口句柄,而FindWindowEx函数还可以指定窗口句柄的父窗口。以下是一个示例代码片段,演示如何使用FindWindow函数来获取NotePad窗口的句柄:
```c++
HWND hWnd = FindWindow("Notepad", NULL);
if(hWnd != NULL)
{
// 窗口句柄不为空,表示找到了NotePad窗口
}
else
{
// 窗口句柄为空,表示未找到NotePad窗口
}
```
注意:在使用Windows API函数时,需要包含Windows.h头文件,并链接user32.lib库。
相关问题
C++ 获取扩展屏窗口句柄
获取扩展屏幕窗口句柄的方法与获取主屏幕窗口句柄的方法是类似的,只需要在获取窗口句柄之前指定窗口所在的屏幕即可。
以下是一个获取扩展屏幕窗口句柄的示例代码:
```cpp
#include <Windows.h>
HWND GetSecondaryMonitorHWND()
{
HWND hwnd = NULL;
HMONITOR hMonitor = NULL;
// 获取第一个副屏幕的句柄
hMonitor = MonitorFromPoint({0, 0}, MONITOR_DEFAULTTOPRIMARY);
// 如果存在副屏幕,则获取其句柄
if (hMonitor != NULL)
{
MONITORINFOEX monitorInfo = {0};
monitorInfo.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo(hMonitor, &monitorInfo);
hwnd = FindWindow(NULL, monitorInfo.szDevice);
}
return hwnd;
}
```
该函数通过 `MonitorFromPoint` 函数获取第一个副屏幕的句柄,然后通过 `GetMonitorInfo` 函数获取该屏幕的信息,包括窗口名称等。最后,通过 `FindWindow` 函数查找具有该名称的窗口,并返回其句柄。
C获取多显示器窗口句柄
要获取多显示器窗口句柄,您可以使用以下步骤:
1. 获取系统中所有显示器的句柄列表。可以使用EnumDisplayMonitors函数来实现。
2. 对于每个显示器,使用FindWindowEx函数来获取该显示器上的顶层窗口句柄。可以使用GetDesktopWindow函数来获取桌面窗口句柄,然后使用FindWindowEx函数来查找顶层窗口句柄。
3. 对于每个顶层窗口句柄,使用GetWindowRect函数来获取窗口的矩形位置和大小。
下面是一个示例代码,展示如何获取多显示器窗口句柄:
```c
#include <windows.h>
int main()
{
// 获取系统中所有显示器的句柄列表
HMONITOR hMon;
MONITORINFO mi;
mi.cbSize = sizeof(mi);
int i = 0;
while (hMon = EnumDisplayMonitors(NULL, NULL, NULL))
{
// 获取该显示器上的顶层窗口句柄
HWND hWnd = FindWindowEx(NULL, NULL, NULL, NULL);
while (hWnd)
{
// 获取窗口的矩形位置和大小
RECT rc;
GetWindowRect(hWnd, &rc);
// 检查窗口是否在该显示器上
if (MonitorFromRect(&rc, MONITOR_DEFAULTTONEAREST) == hMon)
{
// 处理该窗口
// ...
}
hWnd = FindWindowEx(NULL, hWnd, NULL, NULL);
}
i++;
}
return 0;
}
```