2014-02-23 66 views
2
列舉顯示器

我的任務是算在那裏我下面的用戶模式代碼運行連接到計算機上當前顯示器(屏)的數量:問題,Windows

int nCnt = 0; 
if(!EnumDisplayMonitors(NULL, NULL, countMonitorsProc, (LPARAM)&nCnt)) 
{ 
    //Error 
} 

BOOL countMonitorsProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) 
{ 
    int* pCnt = (int*)dwData; 
    (*pCnt)++; 

    return TRUE; 
} 

它工作在大多數情況下,但一些系統EnumDisplayMonitors返回FALSE。這樣的系統的例子:我的筆記本電腦,我連接了一個外部顯示器,並關上它的蓋子。

我很好奇,我使用正確的方法來計數連接的顯示器?

+1

是什麼'GetLastError函數()'返回? – alk

+1

請勿在標題中嵌入不必要的標籤 - 這就是標籤部分的用途。謝謝:) – slugster

+0

@alk:根據MSDN,GetLastError不用於該API。 – c00000fd

回答

0

如果您只想知道連接了多少個顯示器,則不需要撥打EnumDisplayMonitors。爲物理(非虛擬)顯示器執行此操作的正確方法是通過GetSystemMetrics,索引SM_CMONITORS

 
SM_CMONITORS   The number of display monitors on a desktop. For more 
80     information, see the Remarks section in this topic. 

從備註部分

GetSystemMetrics的(SM_CMONITORS)只計算可見顯示監視器。這與EnumDisplayMonitors不同,後者枚舉了與鏡像驅動程序關聯的可見顯示監視器和不可見僞監視器。一個不可見的僞監視器與用於遠程處理或其他用途的鏡像應用程序繪圖的僞設備相關聯。

呼叫後來乾脆變成

nCnt = GetSystemMetrics(SM_CMONITORS);