【WMI】C# で WMI

WMI

 * Windows 上でいろんな情報を取得することが出来る機能

注意点

環境設定

 * 参照の追加で、「System.Management」 を追加

WMI Library

Win32_Process

 * プロセスを表す

Win32_ComputerSystem

 * Windows環境のシステムオペレーションを表す

参考文献

http://www.anchorsystems.jp/anchor/ashp/netmon/samples/wmi_os.html#Win32_ComputerSystem.htm
http://www.wmifun.net/library/

サンプル

実行中の各プロセス表示

using System.Management;

private void button1_Click(object sender, EventArgs e)
{
   string result = string.Empty;
   using (ManagementObjectSearcher objectSearcher =
       new ManagementObjectSearcher("SELECT * FROM Win32_Process"))
   {
       using (ManagementObjectCollection managementObjects = objectSearcher.Get())
       {
           foreach (ManagementObject managementObject in managementObjects)
           {
               result = result +
                   managementObject["Description"].ToString() +
                   ":" +
                   managementObject["ProcessId"].ToString() + "\n";
           }
       }
   }

   this.textBox5.Text = result;
}

CPU一覧の情報

private void button2_Click(object sender, EventArgs e)
{
    // クラスを取得
    ManagementClass managementClass = new ManagementClass("Win32_Processor");
    // CPU一覧を取得
    ManagementObjectCollection managementObjects = managementClass.GetInstances();

    string output = string.Empty;
    // CPU情報を一つずつ取り出す
    foreach (ManagementObject managementObject in managementObjects)
    {
        // 情報を表示
        output =
            output +
            managementObject["DeviceID"].ToString() +
            " / " +
            managementObject["Name"].ToString() +
            " / " +
            managementObject["MaxClockSpeed"].ToString() +
            " / " +
            managementObject["L2CacheSize"].ToString() +
            "\n";
     }

    this.textBox1.Text = output;
}

Windows環境のシステムオペレーション情報

private void button3_Click(object sender, EventArgs e)
{
    string path = @"\\" + Environment.MachineName + @"\root\cimv2";
    ManagementScope scope = new ManagementScope(path);
    scope.Connect();
    ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_ComputerSystem");

    string result = string.Empty;
    using (ManagementObjectSearcher objectSearcher =
        new ManagementObjectSearcher(scope, query))
    {
        using (ManagementObjectCollection managementObjects = objectSearcher.Get())
        {
            foreach (ManagementObject managementObject in managementObjects)
            {
                result = result + managementObject["Caption"].ToString()
                    + " / " + managementObject["AdminPasswordStatus"].ToString()
                    + " / " + managementObject["AutomaticResetBootOption"].ToString()
                    + " / " + managementObject["Domain"].ToString()
                    + " / " + managementObject["UserName"].ToString()
                    + "\n";
            }
        }
    }

    this.textBox1.Text = result;
}