2016-05-28 7 views
2

こんにちは皆、新しいstackoverflow.comへ。ここでどのように質問するのがよいかわからないが、最善を尽くす。被験者に関するかなりの研究は完了しましたが、検出を解決するための1つのことを見つけることができませんでした。表示回数(無効表示)

例例: Windows 7から10のシステムでアクティブAND無効ディスプレイの数を特定しようとしています。

コードGPU [可用性]:

 private int MonCount; 
    [DllImport("User32.dll")] 
    private static extern bool EnumDisplayDevices(
     string lpDevice, int iDevNum, 
     ref DISPLAY_DEVICE lpDisplayDevice, int dwFlags); 

    [StructLayout(LayoutKind.Sequential)] 
    public struct DISPLAY_DEVICE 
    { 
     public int cb; 
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] 
     public string DeviceName; 
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] 
     public string DeviceString; 
     public int StateFlags; 
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] 
     public string DeviceID; 
     [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] 
     public string DeviceKey; 

     public DISPLAY_DEVICE(int flags) 
     { 
      cb = 0; 
      StateFlags = flags; 
      DeviceName = new string((char)32, 32); 
      DeviceString = new string((char)32, 128); 
      DeviceID = new string((char)32, 128); 
      DeviceKey = new string((char)32, 128); 
      cb = Marshal.SizeOf(this); 
     } 
    } 
    public void MonitorCheck() 
    { 
     DISPLAY_DEVICE lpDisplayDevice = new DISPLAY_DEVICE(0);  // OUT 
     DISPLAY_DEVICE monitor_name = new DISPLAY_DEVICE(0);  // OUT 

     int devNum = 0; 
     while (EnumDisplayDevices(null, devNum, ref lpDisplayDevice, 0)) 
     { 

      listBox1.Items.Add("\ndevNum =" + devNum); 
      listBox1.Items.Add("cb =" + lpDisplayDevice.cb); 
      listBox1.Items.Add("DeviceID =" + lpDisplayDevice.DeviceID); 
      listBox1.Items.Add("DeviceKey =" + lpDisplayDevice.DeviceKey); 
      listBox1.Items.Add("DeviceName =" + lpDisplayDevice.DeviceName.Trim()); 
      listBox1.Items.Add("DeviceString =" + lpDisplayDevice.DeviceString.Trim()); 
      // Show monitor name: 
      EnumDisplayDevices(lpDisplayDevice.DeviceName, 0, ref monitor_name, 0); 
      listBox1.Items.Add("Monitor name =" + monitor_name.DeviceString.Trim()); 
      ++devNum; 
     } 
    } 

出典:C# how to get the Windows monitor name

戻る:グラフィックアダプタ情報の全て取り付け可能モニター。カウントは、ディスプレイアダプタに接続できるモニタの数と同じです。

コードアクティブディスプレイ:

Screen.AllScreens.Count(); 

リターン:アクティブモニター数。

問題:2台のモニタが接続されている場合は3 (それに接続されたどのように多くのディスプレイに関係なく。)

: * GPU上記[可用性]コードを返します:

GPUアダプターは、3つの出力を持っている場合(例:ノートパソコンのモニター+外付けHDMIモニタ)が、表示設定は次のように設定されています。ノートパソコンのモニターには、ONLY(外部HDMIモニターがアクティブではありません) - >アクティブ表示コード戻り値:1つの

質問

アクティブでないディスプレイとアクティブディスプレイが接続されているため、2を返すにはどうしたらいいですか(ノートパソコンのモニタ+非アクティブな外部モニタ)?

ソリューション

ありますいくつかのアイデア、これを解決する方法:

  1. は、それらを拡張することにより、すべてのディスプレイを有効にして、単にやり直し:Screen.AllScreens.Count();

アイデア: GPUの出力を比較します[入手可能]出力とすべての値をmonitor_name.DeviceString.Trim()として与えるすべてをカウントする(ただし、私はこれをNVIDIAの広告を持つデスクトップでテストしたapter:結果はnullですが、ラップトップのIntel HDアダプタ:出力は常に「Generic PnP-Monitor」なので、これは解決策ではありません)。

答えて

0

愚かな私...問題を解決するために3つの方法すべてを使用することはありません。 (フォーラムでコードタグで作業するコードを手に入れるのは難しいようだ。

  • 最大取り付け可能なディスプレイ
  • 現在添付ディスプレイ
  • 現在アクティブな表示が

ソリューション:

うーん、StackOverflowのために私のコードを添付することができるように見えることはできません返信、そう:

Pastebin: Monitors counting

関連する問題