使用.NET / WMI获取PC的监视器信息

无论如何使用WMI / .Net来获取监视器信息,如制造商,序列号,监视器大小等?

使用脚本也是一个选项,或者我可以直接查询注册表以获取此信息?

在这种情况下, SELECT * FROM Win32_DesktopMonitor并没有真正为我返回任何有用的信息。

嘿,我使用这个工具进行了很多我的WMI工作,特别是在原型设计和创建POC时….

Microsoft WMI代码生成器

此工具非常适合在C#和VB.NET中为任何wmi查询或方法调用创建快速控制台应用程序代码

 try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_DesktopMonitor"); foreach (ManagementObject queryObj in searcher.Get()) { Console.WriteLine("-----------------------------------"); Console.WriteLine("Win32_DesktopMonitor instance"); Console.WriteLine("-----------------------------------"); Console.WriteLine("Description: {0}", queryObj["Description"]); } } catch (ManagementException e) { MessageBox.Show("An error occurred while querying for WMI data: " + e.Message); } 

上面的代码将为您提供显示器的品牌和型号。

那个选择查询应该给你你想要的。 这是包含查询详细信息的文档。

然后你可以做这样的事情:

  public void GetMonitorDetails() { using(ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DesktopMonitor") { foreach(ManagementObject currentObj in searcher.Get()) { String name = currentObj("Name").ToString(); String device_id = currentObj("DeviceID").ToString(); // ... } } } 

这篇文章结合以下关于WMI管理工具的答案得到了答案。 以下是返回显示器分辨率的代码。

 try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM WmiMonitorBasicDisplayParams"); foreach (ManagementObject queryObj in searcher.Get()) { Debug.WriteLine("-----------------------------------"); Debug.WriteLine("WmiMonitorBasicDisplayParams instance"); Debug.WriteLine("-----------------------------------"); Debug.WriteLine("Description: {0}", queryObj["SupportedDisplayFeatures"]); } } catch (ManagementException e) { MessageBox.Show("An error occurred while querying for WMI data: " + e.Message); } 

在我的情况下,我仍然卡住了,因为它返回了每个显示器的“缩小”分辨率。 其中一个是4K显示器,报告为2560×1440。