【WMI】WMI For C#/dotNet 用WMI获取系统信息

原创 2007年09月15日 22:30:00
想C++/COM一样,通过C#使用dotNet一样可以进行查询和调用方法

查询的基本过程如下:
1.引用WMI的.NET类库
 在项目->引用里面添加对System.Management命名空间所在dll:System.Management.dll的引用。
2.创建ManagementObjectSearcher类的实例
ManagementObjectSearcher类用于根据指定的查询或枚举检索管理对象的集合。
3.执行查询
ManagementObjectSearcher类的Get方法用于执行查询
A同步方式:
        默认的查询方式,执行查询方法以后查询线程等待方法返回,查询方法在得到所有结果集以后才返回。这种方式适合与查询数据量不大,查询时间很短的情况。
       同步情况下,返回一个 ManagementObjectCollection,它包含匹配指定查询的对象。
ManagementObjectCollection result = search.Get();
foreach (ManagementObject info in result)
...{
         Console.WriteLine(
"Name:  {0}", info["name"])
}
B异步方式:
        异步查询需要在执行查询方法的时候,需要传入类型为ManagementOperationObserver的参数。查询到对象后由ManagementOperationObserver对象的ObjectReady事件通知,查询得到的对象在ObjectReady事件参数的NewObject属性中。
        异步情况下,每查询到一个对象,触发一次ManagementOperationObserver类的ObjectReady事件,我们在事件处理过程中获取对象的值。
ManagementOperationObserver results = new
            ManagementOperationObserver();
        
// 连接事件处理程序
results.ObjectReady += new 
            ObjectReadyEventHandler(
this.NewObject);
results.Completed 
+= new 
            CompletedEventHandler(
this.Done);

searcher.Get(results);
//事件处理过程:
private void NewObject(object sender,
ObjectReadyEventArgs obj) 
...{
    Console.WriteLine(
"Name:  {0}", info["name"])
}
    
private void Done(object sender,
    CompletedEventArgs obj) 
...{
     isCompleted 
= true;
}
4.处理结果
        同步查询方式下,枚举ManagementObjectCollection对象里面的元素,即可获得匹配对象;异步方式下, 通过ObjectReadyEventArgs对象的NewObject属性取出匹配对象。

调用方法的基本过程如下:
1.取得Provider类或者它的实例对象
ManagementClass processClass = new ManagementClass("Win32_Process");
        这行代码结果是取得了Win32_Process的类,但没有生成它的实例。通过它,只能调用Win32_Process的静态方法。
ManagementObject classInstance = 
                    
new ManagementObject("root/CIMV2"
                    
"Win32_Service.Name='PlugPlay'",
                    
null);
        这行代码取得了Win32_Service类的一个实例,通过它,可以调用Win32_Service的静态方法和实例方法。
2.生成Provider提供方法的参数的对象
        提供一个object数组,或者ManagementBaseObject类型的对象,里面存储调用函数的参数,然后将object数组或ManagementBaseObject类型的对象传给执行provider方法的函数。
3.调用方法
        调用ManagementClass或ManagementObject的InvokeMethod()方法,执行provider的方法。

Python用WMI模块获取Windows系统的硬件信息

Python用WMI模块获取Windows系统的硬件信息:硬盘分区、使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息。 本文实例讲述了python使用wmi模块获取...
  • xy2953396112
  • xy2953396112
  • 2017年01月18日 11:29
  • 1173

WMI获取系统信息 得到product name

利用WMI获取系统信息, 一般步骤: 1. 通过调用CoInitialzeEx来初始化COM参数. 2. 通过调用CoInitializeSecurity来初始化COM过程安全. ...
  • liyun123gx
  • liyun123gx
  • 2014年02月12日 17:47
  • 800

WMI技术介绍和应用——查询系统信息

本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。(转载请指明出于breaksoftware的csdn博客...
  • breaksoftware
  • breaksoftware
  • 2013年02月05日 18:07
  • 6893

【C++】WMI获取系统硬件信息(CPU/DISK/NetWork etc)

官网找到一个例子,根据例子修改下可以获取很多信息 #define _WIN32_DCOM #include using namespace std; #include #include #p...
  • u010352603
  • u010352603
  • 2016年05月14日 01:50
  • 2080

通过WMI获取系统信息

要了解WMI,请查阅: http://www.microsoft.com/china/technet/community/scriptcenter/resources/wmifaq.mspx#EJC...
  • thanklife
  • thanklife
  • 2017年06月26日 10:05
  • 334

WMI获取硬件信息

#define _WIN32_DCOM   #define _WIN32_WINNT   0X0500       #include    #include    #include    ...
  • bing87496988
  • bing87496988
  • 2014年10月09日 10:06
  • 4705

WMI技术介绍和应用——查询文件夹信息

本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。         本节主要介绍Win32_Directo...
  • breaksoftware
  • breaksoftware
  • 2013年01月11日 20:08
  • 4918

WMI技术介绍和应用——查询硬件信息

这个月实在太忙了,一直没有时间去继续写WMI的应用例子。 本来是希望将《WMI技术介绍和应用》系列博文写的像WMI百科全书般,但是貌似对这个技术感兴趣的同学并不多,所以我决定对部分知识点点到为止,有需...
  • breaksoftware
  • breaksoftware
  • 2013年04月18日 22:50
  • 5434

利用JNI方法,通过WMI获取本地硬件信息(主板型号,硬盘序列号,CPU参数等)

因为有几台服务器是windows 2000的,之前采用的WMIC方法不适用(windows 2003开始有),更不用说WMI .NET了(采用.NET Framework 3.5),只能采用JNI的方...
  • kunrenzhilu
  • kunrenzhilu
  • 2014年10月31日 16:38
  • 1170

C/C++通过WMI和系统API函数获取获取系统硬件配置信息

http://blog.csdn.net/wenliabc2007/article/details/6718084    前段时间由于项目需要,要求做一个服务器的实时性能监控(CPU...
  • pizi0475
  • pizi0475
  • 2015年04月10日 10:16
  • 1882
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【WMI】WMI For C#/dotNet 用WMI获取系统信息
举报原因:
原因补充:

(最多只允许输入30个字)