使用 .NET / WMI 获取 PC 的显示器信息

发布于 2024-09-14 05:18:50 字数 169 浏览 3 评论 0原文

是否有使用 WMI/.Net 来获取显示器信息,例如制造商、序列号、显示器尺寸等?

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

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

Is there anyway using WMI/.Net to grab monitor information such as Manufacturer, Serial Number, Monitor Size etc.?

Using a script is an option as well, or can I query the registry directly to get this information?

SELECT * FROM Win32_DesktopMonitor doesn't really return any useful information for me in this case.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

孤者何惧 2024-09-21 05:18:50

嘿,我在很多 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);
        }

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

Hey, I use this tool for a lot of my WMI work, especially when prototyping and creating POCs....

Microsoft WMI Code Generator

This tool is great for creating quick console app code for any wmi query or method invocation in both C# and VB.NET

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);
        }

The code above will get you the make and model of the monitor.

最后的乘客 2024-09-21 05:18:50

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

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

    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();
             // ...
          }
       }
    }

That select query should give you what you want. Here is the documentation which contains the details of the query.

Then you could do something like this:

    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();
             // ...
          }
       }
    }
待"谢繁草 2024-09-21 05:18:50

这个帖子,结合下面关于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。

This post, combined with the answer below about the WMI management tool had my answer. Here is the code that returns your monitor resolutions.

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);
    }

In my case, I'm still stuck, because it is returning the "scaled down" resolution of each monitor. One of mine is a 4K display, being reported as 2560x1440.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文