我需要帮助如何检索我的屏幕的分辨率,如下图所示。
我发现这个文档 ,这真的很有帮助。 以下是我尝试的代码,基于这些文档:
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