2016-05-28 5 views
2

Hallo alle neuen Stackoverflow.com. Ich bin mir nicht sicher, wie würde hier gefragt werden, aber ich tue mein Bestes. Erledigt, ziemlich viel Forschung zu Thema, aber konnte keine einzige Sache finden, um die Entdeckung aufzulösen.Anzeige Count (Inc. Disabled Displays)

Beispiel: Der Versuch, die Anzahl aktiver UND deaktivierter Anzeigen in Windows 7-10-Systemen zu ermitteln.

-Code GPU [Verfügbarkeit]:

 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; 
     } 
    } 

Quelle: C# how to get the Windows monitor name

Rückkehr: Alle aufsteckbaren Monitore von Graphic Adapter Information. Anzahl ist immer so, wie viele Monitore im Displayadapter angeschlossen werden können.

-Code Aktive Anzeigen:

Screen.AllScreens.Count(); 

Return: Aktiv-Monitor zählen.

Problem:

Wenn GPU Adapter 3 Ausgänge: * Oben genannte GPU [Verfügbarkeit] Code zurückkehrt: 3 (. Egal wie viele Displays mit ihm verbunden sind)

Wenn zwei Monitore angeschlossen sind (Beispiel: Laptop-Monitor + Externer HDMI-Monitor), aber Display-Setup eingestellt ist: Laptop-Monitor NUR (Externer HDMI-Monitor nicht aktiv ist) -> aktiv Zeigt Code Returns: 1

Frage:

Wie kann ich 2 zurückgeben, wenn ein nicht aktives Display und eine aktive Anzeige angeschlossen sind (Laptop Monitor + nicht aktiver externer Monitor)?

Lösungen:

ist es einige Ideen, wie dieses Problem zu beheben:

  1. Aktivieren Sie alle Anzeigen sie durch die Erweiterung und einfach wieder her: Screen.AllScreens.Count();

Idee: Leistung von GPU vergleichen [Verfügbarkeit] Ausgabe und zählen alle, die einen Wert gibt als monitor_name.DeviceString.Trim() (Ich habe dies jedoch auf dem Desktop mit NVIDIA-Anzeige getestet apter: Ergebnis ist null, aber in Laptop Intel HD-Adapter: Ausgabe ist immer "Generic PnP-Monitor", also, das ist keine Lösung).

Antwort

0

Dumm mir ... Nie alle drei Methoden zu verwenden, um das Problem zu lösen. (Es scheint verdammt schwer Code in Code-Tags hier in Foren zu arbeiten.

  • Maximum aufsteckbaren Displays
  • Derzeit befestigt Displays
  • Moment aktive Displays

Lösung:

Hmm, kann nicht in der Lage sein scheinen meinen Code anhängen zu Stackoverflow antworten, so:

Pastebin: Monitors counting

Verwandte Themen