使用WMI获取系统信息

/* **********************************************
 * 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())
    
{
    }

  }

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值