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

问题描述 投票:5回答:4

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

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

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

c# .net wmi monitor
4个回答

11
投票

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

Microsoft WMI Code Generator

此工具非常适合在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);
        }

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


1
投票

那个选择查询应该给你你想要的。 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();
             // ...
          }
       }
    }

0
投票

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。

© www.soinside.com 2019 - 2024. All rights reserved.