无论如何使用WMI / .Net来获取监视器信息,如制造商,序列号,监视器大小等?
使用脚本也是一个选项,或者我可以直接查询注册表以获取此信息?
在这种情况下,SELECT * FROM Win32_DesktopMonitor
并没有真正为我返回任何有用的信息。
嘿,我使用这个工具进行了很多我的WMI工作,特别是在原型设计和创建POC时....
此工具非常适合在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);
}
上面的代码将为您提供显示器的品牌和型号。
那个选择查询应该给你你想要的。 Here是包含查询详细信息的文档。
然后你可以做这样的事情:
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();
// ...
}
}
}
This post,结合以下关于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显示器,报告为2560x1440。