如何识别内屏分辨率启用的多显示器?
我在谷歌搜索了所有,但没有找到答案,所以如果有人知道这将是非常感谢!如何识别内屏分辨率启用的多显示器?
我想使用命令行或一些WinApi来检查多显示器的状态。 例如:如果我设置:“扩展屏幕”或“重复屏幕”,我希望能够验证它。 只是不知道从哪里开始。
非常感谢
我将开始与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 - 祝您好运!
谢谢!只是一个小q,什么是MyPaintEnumProc? VS不认识它。它应该是什么类型?以及它如何连接到CallBack功能? (这是我的第一个C++程序对不起“初学者”的问题) – user1386966
MyPaintEnumProc是指向你的回调函数(一种MonitorEnumProc)的指针。在调用EnumDisplayMonitors之前,您需要声明它:BOOL CALLBACK MyPaintEnumProc( HMONITOR hMonitor,HDC hdcMonitor,LPRECT lprcMonitor,LPARAM dwData ){/ *做些什么* /} – duDE
谢谢!我现在试试 – user1386966
一个很好的问题! +1 – duDE