我正在尝试识别多显示器设置中的屏幕,以保存与该屏幕相关联的一些数据。如何可靠地识别屏幕,即使在重新启动后也是如此?
我知道.Net中的Screen
类,但Screen.DeviceName
似乎并不总是指向一个屏幕(例如在安装新的图形驱动程序后)。
我正在尝试识别多显示器设置中的屏幕,以保存与该屏幕相关联的一些数据。如何可靠地识别屏幕,即使在重新启动后也是如此?
我知道.Net中的Screen
类,但Screen.DeviceName
似乎并不总是指向一个屏幕(例如在安装新的图形驱动程序后)。
尝试使用WMI而不是WinForms。
以下帖子展示了如何获取显示器及其详细信息(例如DisplayDetails类):监视器ID和序列号。
编辑:
我的建议:
using System.Management;
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_DesktopMonitor");
foreach (ManagementObject obj in searcher.Get())
Console.WriteLine("PNP Device ID: {0}", obj ["PNPDeviceID"]);
我通过使用EnumDisplayDevices
API获取DeviceID解决了这个问题。每个屏幕似乎都是唯一的,并且在驱动程序更新后也不会改变。
对于我来说,WMI不可行,因为我之前尝试过它,但它只返回我的多监视器设置中的一个监视器。