如何识别内屏分辨率启用的多显示器?

问题描述:

我在谷歌搜索了所有,但没有找到答案,所以如果有人知道这将是非常感谢!如何识别内屏分辨率启用的多显示器?

我想使用命令行或一些WinApi来检查多显示器的状态。 例如:如果我设置:“扩展屏幕”或“重复屏幕”,我希望能够验证它。 只是不知道从哪里开始。

非常感谢

+0

一个很好的问题! +1 – duDE

我将开始与WinAPI的EnumDisplayMonitors功能:http://msdn.microsoft.com/en-us/library/dd162610%28VS.85%29.aspx

BOOL EnumDisplayMonitors(
    _In_ HDC hdc, 
    _In_ LPCRECT lprcClip, 
    _In_ MONITORENUMPROC lpfnEnum, 
    _In_ LPARAM dwData 
); 

你需要调用这个函数设置第2个参数为NULL这样的:

EnumDisplayMonitors(NULL, NULL, MyPaintEnumProc, 0); 

//Enumerates all display monitors. 
//The callback function receives a NULL HDC. 

现在你有你的MonitorEnumProc回调函数:http://msdn.microsoft.com/en-us/library/dd145061%28v=vs.85%29.aspx

BOOL CALLBACK MonitorEnumProc(
    _In_ HMONITOR hMonitor, 
    _In_ HDC hdcMonitor, 
    _In_ LPRECT lprcMonitor, 
    _In_ LPARAM dwData 
); 

您wiil得到填补lprcMonitor回:

指向一个RECT结构。 如果hdcMonitor不为NULL,则此矩形是由hdcMonitor和显示监视器矩形标识的设备上下文的剪切区域的交点。设备上下文坐标为 。基于此值,所有的显示器,你可以决定你是否有一个扩展模式(rects是不同的)或重复

If hdcMonitor is NULL, this rectangle is the display monitor rectangle. The rectangle coordinates are virtual-screen coordinates. 

(他们是平等的)。

HTH - 祝您好运!

+0

谢谢!只是一个小q,什么是MyPaintEnumProc? VS不认识它。它应该是什么类型?以及它如何连接到CallBack功能? (这是我的第一个C++程序对不起“初学者”的问题) – user1386966

+0

MyPaintEnumProc是指向你的回调函数(一种MonitorEnumProc)的指针。在调用EnumDisplayMonitors之前,您需要声明它:BOOL CALLBACK MyPaintEnumProc( HMONITOR hMonitor,HDC hdcMonitor,LPRECT lprcMonitor,LPARAM dwData ){/ *做些什么* /} – duDE

+1

谢谢!我现在试试 – user1386966