在.NET中輕鬆獲取系統資訊(1) -WMI篇 (轉)

worldblog發表於2007-12-14
在.NET中輕鬆獲取系統資訊(1) -WMI篇 (轉)[@more@]

在中輕鬆獲取資訊(1) -WMI篇

Montaque

申明:

  1、個人的一點心得,僅供參考
  2、轉載時候,請保留原本。

:namespace prefix = o ns = "urn:schemas--com::office" />

概述:

  不知道大家有沒有這種體會?有時候為了獲取系統一點點資訊,比如考慮一下的版本號,或者當前螢幕的解析度。其實說到底就是讀作業系統某個方面的一個屬性值而已,然後就看到我們的中密密麻麻的 申明,,程式碼的可讀性和維護性不言而喻。到了.NET,提供了更為豐富的類,有很多以前要呼叫API的方法可以在.NET中輕而易舉的呼叫實現。今天簡單介紹一個在.NET中如何透過與WMI( 管理規範)的通訊,從而得到獲取資訊的目的。

主要思路:

  舉一個獲取作業系統共享目錄和獲取主機板號的例子,介紹如何利用System.Managment下面的類獲取系統相關的資訊:

正文:

  WMI(Windows管理規範:Windows Management Instrumentation)是Microsoft基於的企業管理(WBEM)的實現,同時也是一種基於標準的介面。WMI最早出現在Microsoft 系統上,但它同樣可以在 4和Windows 9x上。WMI是一種輕鬆獲取系統資訊的強大工具。

  在.NET中,有一個System.Management名空間(系統預設沒有引用,我們可以手動新增引用),透過下面的Class的操作,可以查詢系統軟的資訊,先看一個簡單的例子:

Imports System.Management

Dim searcher As New ManagementSearcher(" * FROM Win32_share")

Dim share As ManagementObject

 For Each share In searcher.Get()

  MessageBox.Show(share.GetText(TextFormat.Mof))

 Next share

執行的結果是列出了所有系統當前共享的目錄、以及描述等等。

分析一下上面的程式碼,可以看到一下幾點:

1、似乎是在進行操作,有點像語句。其實就是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()

  De.WriteLine("主機板製造商:" & share("Manufacturer"))

  Debug.WriteLine("型號:" & share("Product"))

  Debug.WriteLine("序列號:" & share("SerialNumber"))

  Next share

總結以及補充:

  WMI類也是分層次的,具體可以參考msdn中的WMI;轉向.NET平臺開發的時候,最好能多看一些關於.NET新特性的介紹,這樣可以大幅度的提升程式碼的開發以及執行效率。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993128/,如需轉載,請註明出處,否則將追究法律責任。

相關文章