解説
EnumDisplayDevicesを利用して取得する。
本当はEnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);のようにして列挙する必要が
ある。しかし面倒なのでエラーになるまでループすることで列挙している。
ソースコード
#include "atlstr.h"
#include "ArrayEx.h"
#define CAtlStringArray CArrayEx
//
// ディスプレイデバイス名取得
//
// Windows 2000以降対応
//
//仮にディスプレイデバイスが1つでも以下のように1つ以上のデバイス名が取得されることがある
//
// NeoMagic MagicGraph256AV driver
// NetMeeting driver
// RDPDD Chained DD
//
bool GetDisplayDeviceName(CAtlStringArray& 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;
ATLTRACE(_T("%s\n"),sDD.DeviceString);
astrDeviceName.Add(sDD.DeviceString);
dwDevice++;
}
::FreeLibrary(hDLL);
return true;
}
EnumDisplayDevicesを利用して取得する。
本当はEnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);のようにして列挙する必要が ある。しかし面倒なのでエラーになるまでループすることで列挙している。
ソースコード
#include "atlstr.h" #include "ArrayEx.h" #define CAtlStringArray CArrayEx// // ディスプレイデバイス名取得 // // Windows 2000以降対応 // //仮にディスプレイデバイスが1つでも以下のように1つ以上のデバイス名が取得されることがある // // NeoMagic MagicGraph256AV driver // NetMeeting driver // RDPDD Chained DD // bool GetDisplayDeviceName(CAtlStringArray& 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; ATLTRACE(_T("%s\n"),sDD.DeviceString); astrDeviceName.Add(sDD.DeviceString); dwDevice++; } ::FreeLibrary(hDLL); return true; }







