使用Microsoft WMI Code Creator 应用程序 调用WMI获取系统信息

介绍

本文将描述一种使用 Windows Management Instrumentation (WMI) 调用来获取系统信息的方法。 正如您将看到的,从基于 WMI 的调用中获取信息是微不足道的;似乎最困难的部分是找出 WMI 中可用的内容。 幸运的是,Microsoft 提供了一些工具,这些工具也使 WMI 发现变得非常简单。

 



图 1: 使用 WMI 调用获取系统信息。

微软 WMI 代码创建者

Microsoft WMI Code Creator 应用程序可从 Microsoft 免费获得;它可以从这个 URL 下载: 

Download WMI Code Creator v1.0 from Official Microsoft Download Center

根据 Microsoft 的说法,“WMI Code Creator 工具允许您生成 VBScript、C# 和 VB .NET 代码,这些代码使用 WMI 来完成管理任务,例如查询管理数据、执行 WMI 类中的方法或使用WMI。”



图 2: WMI Code Creator 界面(生成代码)。

入门

该解决方案包含一个项目。 该项目被称为“ UsingWMI ”。 提供该项目是为了演示对 WMI 的查询和获取信息。 由于您可以通过此界面访问数百位信息,因此该演示仅展示了如何检索 19 种不同的东西。 用于通过 WMI 访问信息的前两种方法中所示的方法可以更改并用于访问 WMI 中的任何信息。  该项目仅包含一个表单,该表单包含执行所述任务所需的所有代码。

 



图 3: 带有 Project Visible 的解决方案资源管理器。

代码:  使用 WMI

该项目用于针对通过 WMI 接口公开的信息测试不同的调用。 该项目包含一个 Windows 窗体。 该表单包含一个文本框,用于显示通过一系列方法调用收集的信息。

此表单的代码开头如下:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Management; 

 

namespace UsingWMI

{

    public partial class Form1 : Form

    {

        public Form1()

        {

该类从默认导入开始;我将 System.Collections 和 System.Management 添加到默认值并删除了泛型。 在命名空间和类声明之后,表单加载事件会执行类中定义的所有方法,并将结果加载到文本框中进行显示:

public Form1()

{

    InitializeComponent();

 

    // Get System Information using WMI Calls

    this.textBox1.Text += GetAccount() + Environment.NewLine;

    this.textBox1.Text += Environment.NewLine;

    this.textBox1.Text += GetHardDisks();

    this.textBox1.Text += GetBoardMaker() + Environment.NewLine;

    this.textBox1.Text += GetBoardSerNo() + Environment.NewLine;

    this.textBox1.Text += GetBoardProductId() + Environment.NewLine;

    this.textBox1.Text += Environment.NewLine;

    this.textBox1.Text += GetCacheBlockSize() + Environment.NewLine;

    this.textBox1.Text += GetCacheType() + Environment.NewLine;

    this.textBox1.Text += GetCacheMaxSize() + Environment.NewLine;

    this.textBox1.Text += Environment.NewLine;

    this.textBox1.Text += GetCdRomDrive() + Environment.NewLine;

    this.textBox1.Text += Environment.NewLine;

    this.textBox1.Text += GetBIOSmaker() + Environment.NewLine;

    this.textBox1.Text += GetBIOScaption() + Environment.NewLine;

    this.textBox1.Text += GetBIOSserNo() + Environment.NewLine;

    this.textBox1.Text += Environment.NewLine;

    this.textBox1.Text += GetWinIconSpace() + Environment.NewLine;

    this.textBox1.Text += GetWinCursorBlinkRate() +

    Environment.NewLine;

    this.textBox1.Text += GetWinScreenSaverActive() +

    Environment.NewLine;

    this.textBox1.Text += GetWinCoolSwitch() + Environment.NewLine; 

    this.textBox1.SelectionStart = textBox1.Text.Length;

} 

应用程序中的其余代码用于定义表单加载期间调用的方法;在以下方法中,有获取硬盘序列号、BIOS信息、Windows桌面信息、用户信息等的例子:       

public string GetHardDisks()

{

    ManagementObjectSearcher searcher = new

    ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_LogicalDisk"); 

    StringBuilder sb = new StringBuilder(); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            sb.Append("Drive Device ID: " +

            wmi.GetPropertyValue("DeviceID").ToString() +Environment.NewLine);

            sb.Append("Caption: " + wmi.GetPropertyValue("Caption").ToString() + Environment.NewLine);

            sb.Append("Volume Serial Number: " + wmi.GetPropertyValue("VolumeSerialNumber").ToString()

            + Environment.NewLine);

            sb.Append("Free Space: " + wmi.GetPropertyValue("FreeSpace").ToString() + "

            bytes free" + Environment.NewLine + Environment.NewLine);

        }

        catch

        {

            return sb.ToString();

        }

    }

    return sb.ToString();

} 

 

public string GetBoardMaker()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_BaseBoard"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return Environment.NewLine + "Board Maker: " + wmi.GetPropertyValue("Manufacturer").ToString();

        }

        catch {   }

    }

    return "Board Maker: Unknown";

} 

 

public string GetBoardSerNo()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_BaseBoard"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "Serial Number: " + wmi.GetPropertyValue("SerialNumber").ToString();

        }

        catch { }

    }

    return "Serial Number: Unknown";

} 

 

public string GetBoardProductId()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_BaseBoard"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "Product: " + wmi.GetPropertyValue("Product").ToString();

        }

        catch { }

    }

    return "Product: Unknown";

} 

 

public string GetCacheBlockSize()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_CacheMemory"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "Cache Block Size: " + wmi.GetPropertyValue("BlockSize").ToString();

        }

        catch { }

    }

    return "Cache Block Size: Unknown";

} 

 

public string GetCacheType()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_CacheMemory"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "Cache Type: " + wmi.GetPropertyValue("CacheType").ToString();

        }

        catch { }

    }

    return "Cache Type: Unknown";

} 

 

public string GetCacheMaxSize()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_CacheMemory"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "Max Cache Size: " + wmi.GetPropertyValue("MaxCacheSize").ToString();

        }

        catch { }

    }

    return "Max Cache Size: Unknown";

} 

 

public string GetCdRomDrive()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_CDROMDrive"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "CD ROM Drive Letter: " + wmi.GetPropertyValue("Drive").ToString();

        }

        catch { }

    }

    return "CD ROM Drive Letter: Unknown";

} 

 

public string GetAccount()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_UserAccount"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "User Account Name: " + wmi.GetPropertyValue("Name").ToString();

        }

        catch { }

    }

    return "User Account Name: Unknown";

} 

 

public string GetBIOScaption()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_BIOS"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "BIOS Caption: " + wmi.GetPropertyValue("Caption").ToString();

        }

        catch { }

    }

    return "BIOS Caption: Unknown";

}

 

public string GetBIOSmaker()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_BIOS"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "BIOS Maker: " + wmi.GetPropertyValue("Manufacturer").ToString();

        }

        catch { }

    }

    return "BIOS Maker: Unknown";

}

 

public string GetBIOSserNo()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_BIOS"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "BIOS Serial Number: " + wmi.GetPropertyValue("SerialNumber").ToString();

        }

        catch { }

    }

    return "BIOS Serial Number: Unknown";

} 

 

public string GetWinIconSpace()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_Desktop"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "Desktop Icon Spacing: " + wmi.GetPropertyValue("IconSpacing").ToString();

        }

        catch { }

    }

    return "Desktop Icon Spacing: Unknown";

} 

 

public string GetWinCursorBlinkRate()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_Desktop"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "Cursor Blink Rate: " + wmi.GetPropertyValue("CursorBlinkRate").ToString();

        }

        catch { }

    }

    return "Cursor Blink Rate: Unknown";

} 

 

public string GetWinScreenSaverActive()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_Desktop"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "Screen Saver Active: " + wmi.GetPropertyValue("ScreenSaverActive").ToString();

        }

        catch { }

    }

    return "Screen Saver Active: Unknown";

}

 

public string GetWinCoolSwitch()

{

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM

    Win32_Desktop"); 

    foreach (ManagementObject wmi in searcher.Get())

    {

        try

        {

            return "CoolSwitch: " + wmi.GetPropertyValue("CoolSwitch").ToString();

        }

        catch { }

    }

    return "CoolSwitch: Unknown";

}

采用所示的任何一种方法,如果要将 select 语句中的表名换成不同的选项,然后换出属性值,则可以使用相同的代码从 WMI 收集任何信息。 请求返回的部分数据以数组形式恢复;在这些情况下,您需要遍历数组以捕获返回的各个值。 管理搜索器对象接受两个参数,一个称为管理范围(例如,“root\\CIMV2”),另一个称为对象查询,它被定义为一个简单的 SELECT 语句。

概括。

本文旨在演示一种从 WMI 获取信息的简单方法。 如果需要有关硬件的信息(例如硬盘驱动器或主板的序列号)或有关桌面的信息,这是一种简单的收集方法。 Microsoft Code Creator 工具的使用确实简化了检查选项和处理结果的过程。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值