EnumDisplayDevices vs WMI Win32_DesktopMonitor, how to detect active monitors?

前端 未结 5 1458
没有蜡笔的小新
没有蜡笔的小新 2020-12-01 13:22

For my current C++ project I need to detect a unique string for every monitor that is connected and active on a large number of computers.

Research has pointed to 2

5条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-01 13:57

    We've been toying with EnumDisplayDevices in order to detect if the current video card manufacturer is NVIDIA. It's not the same, but maybe it would help. Our piece looked like this:

    int disp_num = 0;
        BOOL res = TRUE;
        do {
            DISPLAY_DEVICE disp_dev_info; 
            ZeroMemory( &disp_dev_info, sizeof(DISPLAY_DEVICE) );
            disp_dev_info.cb = sizeof(DISPLAY_DEVICE);
            res = EnumDisplayDevices( 0, disp_num++, &disp_dev_info, 0x00000001 );
            if(res &&
               disp_dev_info.DeviceString[0]!=0 && disp_dev_info.DeviceString[0]=='N' &&
               disp_dev_info.DeviceString[1]!=0 && disp_dev_info.DeviceString[1]=='V' && 
               disp_dev_info.DeviceString[2]!=0 && disp_dev_info.DeviceString[2]=='I' && 
               disp_dev_info.DeviceString[3]!=0 && disp_dev_info.DeviceString[3]=='D' && 
               disp_dev_info.DeviceString[4]!=0 && disp_dev_info.DeviceString[4]=='I' && 
               disp_dev_info.DeviceString[5]!=0 && disp_dev_info.DeviceString[5]=='A'){
                isNVidia = true;
            }
            int x = 0;
        }while( res != FALSE );
    

    Pretty dumb, but working.

提交回复
热议问题