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;
}
プロジェクトファイルをダウンロード
