4

誰かがEnumDisplayDevicesを使用してモニターの名前を調べたいというこの投稿に出くわしました。

これはまさに私が望んでいることであり、C ++で同様のことを試みましたが、EnumDisplayDevicesへの2回目の呼び出しでは何も返されないようで、グラフィックカードに関する情報しか取得できません。

DISPLAY_DEVICE dd;
memset(&dd, 0, sizeof(DISPLAY_DEVICE));
dd.cb = sizeof(dd);
int i = 0;
while(EnumDisplayDevices(NULL, i, &dd, 0))
{
    Log(_T("Device Name: %s Device String: %s"), dd.DeviceName, dd.DeviceString);

    if(EnumDisplayDevices(dd.DeviceName, 0, &dd, 0))
    {
        Log(_T("Monitor Name: %s Monitor String: %s"), dd.DeviceName, dd.DeviceString);
    }

    i++;
} 

私が得る出力は

Device Name: \\.\DISPLAY1 Device String: NVIDIA GeForce 9300 GE
Device Name: \\.\DISPLAYV1 Device String: NetMeeting driver
Device Name: \\.\DISPLAYV2 Device String: RDPDD Chained DD

ターゲットプラットフォームはXPであり、モニター名を見つけるための標準的な方法はありません。何か案は?

ありがとう。

4

2 に答える 2

4

EnumDisplayDevicesの最初の呼び出しの後、DispDev.DeviceStringにはグラフィックカードの名前が含まれます。2回目の呼び出しの後、 DispDev.DeviceStringにはモニターの名前が含まれます。

この情報を取得する他の方法については、このリンクも参照してください

BOOL GetMonitorInfo(int nDeviceIndex, LPSTR lpszMonitorInfo) {
    BOOL bResult = TRUE;
    FARPROC EnumDisplayDevices;
    HINSTANCE  hInstUserLib;
    DISPLAY_DEVICE DispDev;
    char szDeviceName[32];

    hInstUserLib = LoadLibrary("User32.DLL");

    EnumDisplayDevices = (FARPROC)GetProcAddress(hInstUserLib,
                                                 "EnumDisplayDevicesA");
    if(!EnumDisplayDevices) {
        FreeLibrary(hInstUserLib);
        return FALSE;
    }

    ZeroMemory(&DispDev, sizeof(DISPLAY_DEVICE));
    DispDev.cb = sizeof(DISPLAY_DEVICE);

    // After first call to EnumDisplayDevices DispDev.DeviceString 
    //contains graphic card name
    if(EnumDisplayDevices(NULL, nDeviceIndex, &DispDev, 0)) {
        lstrcpy(szDeviceName, DispDev.DeviceName);

        // after second call DispDev.DeviceString contains monitor's name 
        EnumDisplayDevices(szDeviceName, 0, &DispDev, 0);

        lstrcpy(lpszMonitorInfo, DispDev.DeviceString);
    }
    else {
        bResult = FALSE;
    }

    FreeLibrary(hInstUserLib);

    return bResult;
}
于 2012-04-24T17:09:21.713 に答える
0

Win32_DesktopMonitorは、あなたがやろうとしていることにもっと適していると思います

于 2012-04-24T17:01:23.937 に答える