Obtenir le nom du moniteur avec EnumDisplayDevices

Je suis tombé sur cet article dans lequel quelqu’un veut connaître le nom de son moniteur en utilisant EnumDisplayDevices.

C’est exactement ce que je veux, et j’ai essayé de faire quelque chose de similaire en C ++ mais le deuxième appel à EnumDisplayDevices ne semble jamais rien retourner, je ne reçois que des informations sur la carte graphique.

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 Ssortingng: %s"), dd.DeviceName, dd.DeviceSsortingng); if(EnumDisplayDevices(dd.DeviceName, 0, &dd, 0)) { Log(_T("Monitor Name: %s Monitor Ssortingng: %s"), dd.DeviceName, dd.DeviceSsortingng); } i++; } 

La sortie que je reçois est

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

La plate-forme cible est XP et je ne peux pas trouver de moyen standard pour trouver le nom du moniteur. Des idées?

Merci.

Après le premier appel à EnumDisplayDevices, DispDev.DeviceSsortingng contient le nom de la carte graphique . Après le deuxième appel, DispDev.DeviceSsortingng contient le nom du moniteur .

Voir aussi ce lien pour d’autres moyens d’obtenir cette information

 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.DeviceSsortingng //contains graphic card name if(EnumDisplayDevices(NULL, nDeviceIndex, &DispDev, 0)) { lstrcpy(szDeviceName, DispDev.DeviceName); // after second call DispDev.DeviceSsortingng contains monitor's name EnumDisplayDevices(szDeviceName, 0, &DispDev, 0); lstrcpy(lpszMonitorInfo, DispDev.DeviceSsortingng); } else { bResult = FALSE; } FreeLibrary(hInstUserLib); return bResult; } 

Je pense que Win32_DesktopMonitor peut être plus adapté à ce que vous essayez de faire.