我需要有关如何检索屏幕分辨率的帮助,如下图所示。
我找到了this documentation,这真的很有帮助。以下是我尝试过的代码,基于这些文档:
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";
但是,它仅识别并提供有关主监视器的信息。我如何获得有关其他监视器的信息?
答案 0 :(得分:5)
#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;
}
答案 1 :(得分:2)
要枚举连接到计算机的所有设备,请调用EnumDisplayDevices
function并枚举设备。然后拨打EnumDisplayMonitors
。这将返回每个监视器(HMONITOR
)的句柄,该句柄与GetMonitorInfo
一起使用。
如果操作系统是Windows XP SP2或更高版本(在SP1下失败),您也可以使用WMI的Win32_DesktopMonitor
class。
此外,您可以尝试使用注册表中的EDID值来获取大小,但在许多情况下,EDID值无效。
注册表路径
HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \枚举\ DISPLAY