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

在 .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 新特性的介绍,这样可以大幅度的提升代码的开发效率以及运行效率。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus