【发布时间】:2011-03-29 11:18:21
【问题描述】:
有没有使用 WMI/.Net 来获取监视器信息,例如制造商、序列号、监视器大小等?
使用脚本也是一种选择,或者我可以直接查询注册表以获取此信息吗?
SELECT * FROM Win32_DesktopMonitor 在这种情况下并没有真正为我返回任何有用的信息。
【问题讨论】:
有没有使用 WMI/.Net 来获取监视器信息,例如制造商、序列号、监视器大小等?
使用脚本也是一种选择,或者我可以直接查询注册表以获取此信息吗?
SELECT * FROM Win32_DesktopMonitor 在这种情况下并没有真正为我返回任何有用的信息。
【问题讨论】:
【讨论】:
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。
【讨论】:
嘿,我在很多 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();
// ...
}
}
}
【讨论】: