概述
不知道大家有沒有這種體會?有時候為了獲取系統一點點信息比如考慮一下操作系統的版本號或者當前屏幕的分辨率其實說到底就是讀操作系統某個方面的一個屬性值而已然後就看到我們的程序中密密麻麻的Win API申明調用代碼的可讀性和維護性不言而喻到了NET微軟提供了更為豐富的類有很多以前要調用API的方法可以在NET中輕而易舉的調用實現今天簡單介紹一個在NET中如何通過與WMI(Windows 管理規范)的通訊從而得到獲取信息的目的
主要思路
舉一個獲取操作系統共享目錄和獲取主板號的例子介紹如何利用SystemManagment下面的類獲取系統相關的信息
正文
WMI(Windows管理規范Windows Management Instrumentation)是Microsoft基於Web的企業管理(WBEM)的實現同時也是一種基於標准的系統管理接口WMI最早出現在Microsoft Windows 系統上但它同樣可以安裝在Windows NT 和Windows x計算機上WMI是一種輕松獲取系統信息的強大工具
在NET中有一個SystemManagement名空間(系統默認沒有引用我們可以手動添加引用)通過下面的Class的操作可以查詢系統軟硬件的信息先看一個簡單的例子
Imports SystemManagement
Dim searcher As New ManagementObjectSearcher(SELECT * FROM Win_share)
Dim share As ManagementObject
For Each share In searcherGet()
MessageBoxShow(shareGetText(TextFormatMof))
Next share
運行的結果是列出了所有系統當前共享的目錄以及描述等等
分析一下上面的代碼可以看到一下幾點
似乎是在進行數據庫操作有點像SQL語句其實就是SQL操作這種語句被成WQL(WMI Query Language)實際上是標准SQL的一個子集加上了WMI的擴展
WQL是個只讀的查詢語言我們只能查詢響應的數據不能用UPDATEINSERT等更新操作
代碼很簡單通俗易懂
我們采用了一種MOF(托管對象格式)的顯示
例子二獲取當前主板的信息
上面的例子是一個軟件方面的信息下面看一個獲取硬件信息的例子獲取主板的序列號以及制造商
Dim searcher As New ManagementObjectSearcher(SELECT * FROM Win_BaseBoard)
Dim share As ManagementObject
For Each share In searcherGet()
DebugWriteLine(主板制造商: & share(Manufacturer))
DebugWriteLine(型號: & share(Product))
DebugWriteLine(序列號: & share(SerialNumber))
Next share
總結以及補充
WMI類也是分層次的具體可以參考msdn中的WMI轉向NET平台開發的時候最好能多看一些關於NET新特性的介紹這樣可以大幅度的提升代碼的開發效率以及運行效率
From:http://tw.wingwit.com/Article/program/net/201311/13612.html