Windows 2000以上で用意されているEnumDisplayDevicesを利用すると、そのPCにインストールされているディスプレイデバイスを一覧できる。
NVIDIA Quadro FX 2500M NVIDIA Quadro FX 2500M RDPDD Chained DD RDP Encoder Mirror Driver
依存環境:ATL
#include "atlstr.h" #include "atlcoll.h" /// ///\brief /// ディスプレイデバイス名取得 /// ///仮にディスプレイデバイスが1つでも以下のように1つ以上のデバイス名が取得されることがある /// /// Windows 2000以降対応 /// ///\param astrDeviceName ///取得したデバイス名の配列 /// ///\retval true ///\retval false /// ///-取得結果例1 /// - NeoMagic MagicGraph256AV driver /// - NetMeeting driver /// - RDPDD Chained DD ///-取得結果例2 /// - NVIDIA Quadro FX 2500M /// - NVIDIA Quadro FX 2500M /// - RDPDD Chained DD /// - RDP Encoder Mirror Driver bool GetDisplayDeviceName(CAtlArray<CAtlString>& astrDeviceName) { HMODULE hDLL; BOOL ret; DWORD dwDevice; DISPLAY_DEVICE sDD; BOOL (CALLBACK* pfnEnumDisplayDevices)(PVOID Unused,DWORD iDevNum,PDISPLAY_DEVICE lpDisplayDevice,DWORD dwFlags); astrDeviceName.RemoveAll(); hDLL = ::LoadLibrary(_T("user32.dll")); if(hDLL == NULL) return false; #ifdef _UNICODE (FARPROC&)pfnEnumDisplayDevices = ::GetProcAddress(hDLL,"EnumDisplayDevicesW"); #else (FARPROC&)pfnEnumDisplayDevices = ::GetProcAddress(hDLL,"EnumDisplayDevicesA"); #endif if(pfnEnumDisplayDevices == NULL) { ::FreeLibrary(hDLL); return false; } dwDevice = 0; while(1) { ::ZeroMemory(&sDD,sizeof(DISPLAY_DEVICE)); sDD.cb = sizeof(DISPLAY_DEVICE); //dwDevice番目のディスプレイデバイスを取得 ret = pfnEnumDisplayDevices(NULL,dwDevice,&sDD,0); if(ret == FALSE) break; astrDeviceName.Add(sDD.DeviceString); dwDevice++; } ::FreeLibrary(hDLL); return true; } bool Test() { size_t i; size_t nSize; CAtlArray<CAtlString> astrName; GetDisplayDeviceName(astrName); nSize = astrName.GetCount(); for(i = 0; i < nSize; i++) { ATLTRACE("%s\n",astrName[i]); } return true; }プロジェクトファイルをダウンロード