C++获取机器所有的显示器HWND
时间: 2024-10-13 12:10:54 浏览: 35
在C++中,直接获取计算机所有显示器的HWND(窗口句柄)通常是不可能的,因为Windows API并不提供这样的功能。HWND通常用于特定已创建的窗口,而不是代表整个显示器。然而,如果你的目标是在图形应用程序中遍历显示适配器或屏幕,可以使用`EnumDisplayDevices`函数从Windows API。
以下是一个简单的示例,展示了如何通过`EnumDisplayDevices`获取显示器的信息:
```cpp
#include <windows.h>
#include <iostream>
bool EnumScreens(HWND desktopHandle, std::vector<DEVMODE>& screens) {
DEVMODE dm;
ZeroMemory(&dm, sizeof(dm));
dm.dmSize = sizeof(dm);
if (EnumDisplayDevices(NULL, ENUM_CURRENT_SETTINGS, &dm, 0)) {
screens.push_back(dm);
while (EnumDisplayDevices(desktopHandle, ENUM_CURRENT_SETTINGS, &dm, 0)) {
screens.push_back(dm);
}
}
return screens.size() > 0;
}
int main() {
std::vector<DEVMODE> screens;
HWND desktopHandle = GetDesktopWindow();
if (EnumScreens(desktopHandle, screens)) {
for (const auto& screen : screens) {
// 打印屏幕信息,例如分辨率等
std::cout << "Monitor Name: " << screen.dmDeviceName << "\n";
std::cout << "Resolution: " << screen.dmPelsWidth << "x" << screen.dmPelsHeight << "\n";
}
} else {
std::cerr << "Failed to enumerate screens." << std::endl;
}
return 0;
}
```
请注意,这个例子仅列出基本的屏幕信息,并不会得到HWND。如果你想处理每个显示器上的窗口操作,你可能需要使用其他手段,比如消息泵和窗口管理函数。
阅读全文