1
我一直在努力解決問題。通過Win32_DesktopMonitor檢測連接的顯示器的序列號
我正在嘗試獲取所有連接的顯示器的序列號。
我已經試過Win32_DesktopMonitor甚至CIM_DesktopMonitor沒有成功。
例如,我有10臺電視連接並正在運行(上),但這些電話只返回4個電視。 (見下面的截圖)
我最好的猜測是,它是關於WDDM但如何解決這個問題?
我一直在努力解決問題。通過Win32_DesktopMonitor檢測連接的顯示器的序列號
我正在嘗試獲取所有連接的顯示器的序列號。
我已經試過Win32_DesktopMonitor甚至CIM_DesktopMonitor沒有成功。
例如,我有10臺電視連接並正在運行(上),但這些電話只返回4個電視。 (見下面的截圖)
我最好的猜測是,它是關於WDDM但如何解決這個問題?
嘗試另一種方法,例如原生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
}
}
閱讀文檔。
好吧,它沒有打印出任何東西......我會嘗試調試。 –
爲我打印我的兩臺顯示器,以便您知道。 – Evk
它在我截圖的機器上工作,但不在我自己的計算機上。 (也許我從Thunderbolt輸出使用蘋果顯示器?)但最重要的一點是,在DISPLAY_DEVICE結構中沒有SerialNumber,但只有DeviceID和DeviceKey是相同的,我猜他們不可靠 - 這意味着它們會改變當您拔下並重新插入它們時,即使您更改了連接端口,我也需要一個不會更改的唯一ID。 –