2015-09-17 109 views
1

我一直在努力解決問題。通過Win32_DesktopMonitor檢測連接的顯示器的序列號

我正在嘗試獲取所有連接的顯示器的序列號。

我已經試過Win32_DesktopMonitor甚至CIM_DesktopMonitor沒有成功。

例如,我有10臺電視連接並正在運行(上),但這些電話只返回4個電視。 (見下面的截圖)

See screenshot

我最好的猜測是,它是關於WDDM但如何解決這個問題?

回答

0

嘗試另一種方法,例如原生winapi函數。示例代碼:在上面的,如果你爲什麼以這種奇怪的方式使用了濃厚的興趣鏈接功能的

public class Program { 
    private static void Main(string[] args) { 
     var dd = new DISPLAY_DEVICE(); 
     dd.cb = Marshal.SizeOf(dd); 
     uint devNum = 0; 
     while (EnumDisplayDevices(null, devNum, ref dd, 0)) { 
      uint devMon = 0; 
      var ddMon = new DISPLAY_DEVICE(); 
      ddMon.cb = Marshal.SizeOf(ddMon); 
      while (EnumDisplayDevices(dd.DeviceName, devMon, ref ddMon, 0)) { 
       Console.WriteLine(ddMon.DeviceName); 
       Console.WriteLine(ddMon.DeviceID); 
       Console.WriteLine(ddMon.DeviceKey); 
       Console.WriteLine(ddMon.DeviceString); 
       Console.WriteLine(); 
       devMon++; 
       ddMon.cb = Marshal.SizeOf(ddMon); 
      } 
      devNum++; 
      dd.cb = Marshal.SizeOf(dd); 
     } 
     Console.ReadKey(); 
    } 

    [DllImport("user32.dll")] 
    public static extern bool EnumDisplayDevices(string lpDevice, uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, uint dwFlags); 

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

    [Flags()] 
    public enum DisplayDeviceStateFlags : int { 
     AttachedToDesktop = 0x1, 
     MultiDriver = 0x2, 
     PrimaryDevice = 0x4, 
     MirroringDriver = 0x8, 
     VGACompatible = 0x16, 
     Removable = 0x20, 
     ModesPruned = 0x8000000, 
     Remote = 0x4000000, 
     Disconnect = 0x2000000 
    } 
} 

閱讀文檔。

+0

好吧,它沒有打印出任何東西......我會嘗試調試。 –

+0

爲我打印我的兩臺顯示器,以便您知道。 – Evk

+0

它在我截圖的機器上工作,但不在我自己的計算機上。 (也許我從Thunderbolt輸出使用蘋果顯示器?)但最重要的一點是,在DISPLAY_DEVICE結構中沒有Seri​​alNumber,但只有DeviceID和DeviceKey是相同的,我猜他們不可靠 - 這意味着它們會改變當您拔下並重新插入它們時,即使您更改了連接端口,我也需要一個不會更改的唯一ID。 –

相關問題