使用WMI获取系统信息

来源:互联网 发布:简支梁弯矩计算软件 编辑:程序博客网 时间:2024/04/29 17:04
/* **********************************************
 * Rainsoft Development Library for Microsoft.NET
 *
 * Copyright (c) 2004,2005 RainTrail Studio.China
 * All Rigths Reserved!
 * Author: Q.yuhen (qyuhen@hotmail.com)
 ********************************************** 
*/

using System;
using System.Management;
using System.Collections;
using System.Collections.Specialized;
using System.Text;

namespace Rainsoft.Management
{
  
WMIPath

  
/// <summary>
  
/// 获取系统信息
  
/// </summary>
  
/// <example>
  
/// <code>
  
/// WMI w = new WMI(WMIPath.Win32_NetworkAdapterConfiguration);
  
/// for (int i = 0; i &lt; w.Count; i ++)
  
/// {
  
///    if ((bool)w[i, "IPEnabled"])
  
///    {
  
///      Console.WriteLine("Caption:{0}", w[i, "Caption"]);
  
///      Console.WriteLine("MAC Address:{0}", w[i, "MACAddress"]);
  
///    }
  
/// }
  
/// </code>
  
/// </example>

  public sealed class WMI
  
{
    
private ArrayList mocs;
    
private StringDictionary names; // 用来存储属性名,便于忽略大小写查询正确名称。

    
/// <summary>
    
/// 信息集合数量
    
/// </summary>

    public int Count
    
{
      
get return mocs.Count; }
    }


    
/// <summary>
    
/// 获取指定属性值,注意某些结果可能是数组。
    
/// </summary>

    public object this[int index, string propertyName]
    
{
      
get
      
{
        
try
        
{
          
string trueName = names[propertyName.Trim()]; // 以此可不区分大小写获得正确的属性名称。
          Hashtable h = (Hashtable)mocs[index];
          
return h[trueName];
        }

        
catch
        
{
          
return null;
        }

      }

    }


    
/// <summary>
    
/// 返回所有属性名称。
    
/// </summary>
    
/// <param name="index"></param>
    
/// <returns></returns>

    public string[] PropertyNames(int index)
    
{
      
try
      
{
        Hashtable h 
= (Hashtable)mocs[index];
        
string[] result = new string[h.Keys.Count];

        h.Keys.CopyTo(result, 
0);

        Array.Sort(result);
        
return result;
      }

      
catch
      
{
        
return null;
      }

    }


    
/// <summary>
    
/// 返回测试信息。
    
/// </summary>
    
/// <returns></returns>

    public string Test()
    
{
      
try
      
{
        StringBuilder result 
= new StringBuilder(1000);

        
for (int i = 0; i < Count; i++)
        
{
          
int j = 0;
          
foreach(string s in PropertyNames(i))
          
{
            result.Append(
string.Format("{0}:{1}={2} "++j, s, this[i, s]));

            
if (this[i, s] is Array)
            
{
              Array v1 
= this[i, s] as Array;
              
for (int x = 0; x < v1.Length; x++)
              
{
                result.Append(
" " + v1.GetValue(x) + " ");
              }

            }

          }

          result.Append(
"======WMI======= ");
        }


        
return result.ToString();
      }

      
catch
      
{
        
return string.Empty;
      }

    }


    
/// <summary>
    
/// 构造函数
    
/// </summary>
    
/// <param name="path"></param>

    public WMI(string path)
    
{
      names 
= new StringDictionary();
      mocs 
= new ArrayList();

      
try
      
{
        ManagementClass cimobject 
= new ManagementClass(path);
        ManagementObjectCollection moc 
= cimobject.GetInstances();

        
bool ok = false;
        
foreach(ManagementObject mo in moc)
        
{
          Hashtable o 
= new Hashtable();
          mocs.Add(o);

          
foreach (PropertyData p in mo.Properties)
          
{
            o.Add(p.Name, p.Value);
            
if (!ok) names.Add(p.Name, p.Name);
          }


          ok 
= true;
          mo.Dispose();
        }

        moc.Dispose();
      }

      
catch(Exception e)
      
{
        
throw new Exception(e.Message);
      }

    }


    
/// <summary>
    
/// 构造函数
    
/// </summary>
    
/// <param name="path"></param>

    public WMI(WMIPath path): this(path.ToString())
    
{
    }

  }

}
 
原创粉丝点击