2014-03-06 76 views
1

我在谷歌搜索了所有,但沒有找到答案,所以如果有人知道這將是非常感謝!如何識別內屏分辨率啓用的多顯示器?

我想使用命令行或一些WinApi來檢查多顯示器的狀態。 例如:如果我設置:「擴展屏幕」或「重複屏幕」,我希望能夠驗證它。 只是不知道從哪裏開始。

非常感謝

+0

一個很好的問題! +1 – duDE

回答

2

我將開始與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