分類:[C/C++]
2014/07/04(Fri) 16:59:09 編集(投稿者)
2014/07/04(Fri) 15:50:49 編集(投稿者)
== 追記 ==
(device.StateFlags & DISPLAY_DEVICE_ACTIVE) != 1
という比較をしたところ、3番以降のモニタについては除外できるようになりました。
引き続き、型番の取得方法をお教えください。
==========
C++(MFC)でモニタの情報を取得する為に以下のソースを書きました
取得したい情報は、解像度・モニタの型番です。
解像度の取得は一応できていますが、
仮想モニタ(と言っていいのかわかりませんが・・)みたいなものまで取得され困っています。
(取得される文字列も最後にコピペしてあります。)
3番目以降は取得しなくてもいいので、どうやれば除外できるでしょうか?
また、型番の取得はどのように行えばいいでしょうか?
型番の取得については全く分からないので、出来たら詳しくお教え頂けたらうれしいです。
開発環境:Windows7、VS2013 Update2、C++(MFC)、デュアルディスプレイ
対象環境:WindowsXP以上、シングルディスプレイ以上
== ソース ==
CString CMFCApplication1Doc::GetInformation2()
{
if (!m_str.IsEmpty()) m_str = _T("");
int count = 0;
int maxMonitorCount = 10;
for (int i = 0; i < maxMonitorCount; i++)
{
DISPLAY_DEVICE device;
ZeroMemory(&device, sizeof(DISPLAY_DEVICE));
device.cb = sizeof(DISPLAY_DEVICE);
if (EnumDisplayDevices(NULL, count++, &device, NULL) != 0)
{
HDC hDC = CreateDC(device.DeviceName, NULL, NULL, NULL);
int x = GetDeviceCaps(hDC, HORZRES);
int y = GetDeviceCaps(hDC, VERTRES);
m_str.AppendFormat(_T("=== ディスプレイ(%d) ===\r\n"), count);
m_str.AppendFormat(_T("%dx%d - %s\r\n"), x, y, device.DeviceName);
m_str.Append(_T("\r\n"));
DeleteDC(hDC);
}
}
return m_str;
}
== 取得される文字列 ==
=== ディスプレイ(1) ===
1920x1080 - \\.\DISPLAY1
=== ディスプレイ(2) ===
1440x900 - \\.\DISPLAY2
=== ディスプレイ(3) ===
0x0 - \\.\DISPLAY3
=== ディスプレイ(4) ===
0x0 - \\.\DISPLAYV1
=== ディスプレイ(5) ===
0x0 - \\.\DISPLAYV2
=== ディスプレイ(6) ===
0x0 - \\.\DISPLAYV3