獲取windows系統的顯示器個數

獲取windows系統的顯示器個數

問題描述

如何知道windows系統所接的顯示器的個數?顯示器是泛指,包括投影儀,應該說顯示設備更合理些。網上找了些方法,篩選後找到較爲簡單的三個,供參考。windows

方法

主要使用了GetSystemMetrics、EnumDisplayMonitors和EnumDisplayDevices這幾個函數,結合顯示設備DISPLAY_DEVICE的屬性,找出顯示設備的個數。函數

方法1

使用GetSystemMetrics最簡單:code

int dspNum = ::GetSystemMetrics(SM_CMONITORS);

方法2

使用EnumDisplayMonitors也簡單,代碼以下:get

int dspNum = 0;
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
     dspNum += 1;
}
EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, NULL);//加到主函數執行就能夠了

方法3

EnumDisplayDevices稍複雜:it

bool           bFlag            = true;
int            dspNum           = 0;
DISPLAY_DEVICE ddDisplay;
DEVMODE        dmDevMode;

ZeroMemory(&ddDisplay, sizeof(ddDisplay));
ddDisplay.cb = sizeof(ddDisplay);
ZeroMemory(&dmDevMode, sizeof(dmDevMode));
dmDevMode.dmSize = sizeof(dmDevMode);

while (bFlag)
{
     bFlag = EnumDisplayDevices(NULL, dspNum, &ddDisplay, 0);
     bFlag = bFlag & EnumDisplaySettings(ddDisplay.DeviceName, ENUM_CURRENT_SETTINGS, &dmDevMode);
     if (bFlag)
     {
         dspNum += 1;
     }
}

缺陷

若是接兩個顯示器,設置系統處於複製模式(Clone/duplicate),則上述三種方法都失效,只能找到一個顯示設備。io

參考

  1. Enumeration and Display Control
相關文章
相關標籤/搜索