首页 > 编程 > .NET > 正文

在.NET中轻松获取系统信息(1) -WMI篇 Montaque(原作)

2024-07-10 13:02:07
字体:
来源:转载
供稿:网友
在.net中轻松获取系统信息(1) -wmi篇    montaque(原作)  
  
关键字     wmi,wql,managementobjectsearcher
  


在.net中轻松获取系统信息(1) -wmi篇

montaque

申明:

    1、个人的一点心得,仅供参考
    2、转载时候,请保留原本。




概述:

       不知道大家有没有这种体会?有时候为了获取系统一点点信息,比如考虑一下操作系统的版本号,或者当前屏幕的分辨率。其实说到底就是读操作系统某个方面的一个属性值而已,然后就看到我们的程序中密密麻麻的win32 api申明,调用,代码的可读性和维护性不言而喻。到了.net,微软提供了更为丰富的类,有很多以前要调用api的方法可以在.net中轻而易举的调用实现。今天简单介绍一个在.net中如何通过与wmi(windows 管理规范)的通讯,从而得到获取信息的目的。

主要思路:

       举一个获取操作系统共享目录和获取主板号的例子,介绍如何利用system.managment下面的类获取系统相关的信息:



正文:

       wmi(windows管理规范:windows management instrumentation)是microsoft基于web的企业管理(wbem)的实现,同时也是一种基于标准的系统管理接口。wmi最早出现在microsoft windows 2000系统上,但它同样可以安装在windows nt 4和windows 9x计算机上。wmi是一种轻松获取系统信息的强大工具。

       在.net中,有一个system.management名空间(系统默认没有引用,我们可以手动添加引用),通过下面的class的操作,可以查询系统软硬件的信息,先看一个简单的例子:



imports system.management

dim searcher as new managementobjectsearcher("select * from win32_share")

dim share as managementobject

for each share in searcher.get()

       messagebox.show(share.gettext(textformat.mof))

next share


运行的结果是列出了所有系统当前共享的目录、以及描述等等。



分析一下上面的代码,可以看到一下几点:

1、似乎是在进行数据库操作,有点像sql语句。其实就是sql操作,这种语句被成wql(wmi query language),实际上是标准sql的一个子集加上了wmi的扩展.

2、wql是个只读的查询语言,我们只能查询响应的数据,不能用update,insert等更新操作

3、代码很简单、通俗易懂

4、我们采用了一种mof(托管对象格式)的显示。



例子二:获取当前主板的信息

       上面的例子是一个软件方面的信息,下面看一个获取硬件信息的例子,获取主板的序列号以及制造商:

dim searcher as new managementobjectsearcher("select * from win32_baseboard")

dim share as managementobject

   for each share in searcher.get()

      debug.writeline("主板制造商:" & share("manufacturer"))

      debug.writeline("型号:" & share("product"))

      debug.writeline("序列号:" & share("serialnumber"))

   next share


总结以及补充:

       wmi类也是分层次的,具体可以参考msdn中的wmi;转向.net平台开发的时候,最好能多看一些关于.net新特性的介绍,这样可以大幅度的提升代码的开发效率以及运行效率。



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表