我如何获得每个显示器的尺寸(分辨率)?

我需要帮助如何检索我的屏幕的分辨率,如下图所示。

一个1680x1050,另一个1366x768,第三个1280x800

我发现这个文档 ,这真的很有帮助。 以下是我尝试的代码,基于这些文档:

int numberOfScreens = GetSystemMetrics(SM_CMONITORS); int width = GetSystemMetrics(SM_CXSCREEN); int height = GetSystemMetrics(SM_CYSCREEN); std::cout << "Number of monitors: " << numberOfScreens << "\n"; // returns 3 std::cout << "Width:" << width << "\n"; std::cout << "Height:" << height << "\n"; 

但是,它只能识别和提供有关监视器的信息。 我如何获得有关其他显示器的信息?

 #include <Windows.h> BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) { MONITORINFO info; info.cbSize = sizeof(info); if (GetMonitorInfo(hMonitor, &info)) { std::cout << "Monitor x: "<< std::abs(info.rcMonitor.left - info.rcMonitor.right) <<" y: " << std::abs(info.rcMonitor.top - info.rcMonitor.bottom) << std::endl; } return TRUE; // continue enumerating } int main() { EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, 0); return 0; } 

要枚举连接到计算机的所有设备,请调用EnumDisplayDevices函数并枚举设备。 然后调用EnumDisplayMonitors 。 这将返回每个监视器( HMONITOR )的句柄,该句柄与GetMonitorInfo一起GetMonitorInfo

如果操作系统是Windows XP SP2或更高版本(它在SP1下失败),也可以使用WMI的Win32_DesktopMonitor类 。

您也可以尝试使用注册表中的EDID值来获取大小,但在很多情况下,EDID值无效。

注册表路径

HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \枚举\ DISPLAY