C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 121 を表示中)
■72681 / )  C++(MFC)でモニタ情報の取得
□投稿者/ nobb (44回)-(2014/07/04(Fri) 15:48:49)

分類:[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

返信 編集キー/


管理者用

- Child Tree -