摘要:獲取系統信息的方法是調用API函數來實現,通過WMI編程,在VB環境中實現查看系統信息的功能。
關鍵詞:WMI;VB;系統信息
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)34-1668-02
Showing System Information with WMI
SU Ying, ZHANG Yue-hua
(Taiyuan University of Technology Yangquan College, Yangquan 045000, China)
Abstract: Method of Getting the system information is that callingthe API functions to realize, through WMI programming, get the system information in VB.
Key words: WMI; VB; system information
1 WMI
1.1 WMI簡介
WMI是Windows管理規范(Windows Management Instrumentation[1]),是Microsoft基于Web的企業管理(WBEM)[2]的實現,是一項行業推薦規范,是為訪問企業環境中的管理信息而開發一種標準化技術。
WMI是可伸縮的系統管理結構,該規范采用一個統一、基于標準且可擴展的面向對象接口。它提供與系統管理員信息和基礎WMI API交互的標準方法,主要由系統管理應用程序開發人員和系統管理員用來訪問和操作系統管理信息。WMI提供了一套內置在Microsoft Windows操作系統中的豐富的系統管理服務,從Windows 2000開始,WMI(Windows 管理規范)就內置于操作系統中,并且成為了Windows系統管理的重要組成部分。
1.2 WMI的主要功能
1) 訪問本地主機的一些信息和服務,通過WMI 可以獲取主板、BIOS、磁盤、顯卡、聲卡、內存、操作系統、網絡等幾乎所有的系統信息;
2) 獲取遠程計算機信息和實現使用WMI遠程控制計算機[3],可以管理遠程計算機,比如:重啟,關機,關閉進程,創建進程,IP地址自動更改[4],對服務器硬盤資源進行實時監視和自動化管理[5]等。
2 查看WMI各分類的屬性、方法
1) 利用wbemtest[6]在進行WMI編程的時候,要想得到相應的信息類型的屬性,一種方法是通過查詢,另外一種方法是通過在Windows環境中,單擊“開始”->“運行”,在彈出的“運行”對話框中輸入“wbemtest”命令,單擊“確定”按鈕,即打開了“Windows管理規范測試器”,剛開始默認的名稱空間為“root\\default”,當需要更改名稱空間,單擊“連接”按鈕,將默認的“root\\default”更改為“root\\cimv2”,單擊“連接”。可以單擊“打開類別”,在彈出的對話框中輸入要查找的類名(例如Win32_Processor)就可以查詢類的屬性和方法。
2) 利用Internet上的MSDN來查看WMI各分類的屬性、方法。
3 WMI在VB中的應用
下面是在VB中調用WMI來進行CPU、聲卡、顯卡檢測。
1) 首先打開VB環境,單擊先“工程”->“引用”[7],在彈出的“引用”對話框中,選中左側列表框中的“Microsoft WMI Scripting V1.1 Library”選項。
2) 在窗體Form1中加入一個TextBox和CommandButton。在Command1.click中加入以下代碼:
'CPU檢測
Dim wmiObjSet As SWbemObjectSet
Dim obj As SWbemObject
Set wmiObjSet = GetObject(\"winmgmts:_{impersonation Level=impersonate}\").
_InstancesOf(\"Win32_Processor\")
For Each obj In wmiObjSet
Text1.Text = \"CPU信息:\" vbCrLf
Text1.Text = Text1.Text \"【CPU類型】\" obj.Name vbCrLf
Text1.Text = Text1.Text \"【封裝類型】:\" obj.SocketDesignation vbCrLf
Next
'聲卡檢測
Set wmiObjSet = GetObject(\"winmgmts:_{impersonation Level=impersonate}\").
_InstancesOf(\"Win32_SoundDevice\")
For Each obj In wmiObjSet
Text1.Text = Text1.Text \"聲卡信息:\" vbCrLf
Text1.Text = Text1.Text \"【聲卡】:\" obj.ProductName vbCrLf
Next
'顯卡檢測
Set wmiObjSet = GetObject(\"winmgmts:_{impersonation Level=impersonate}\").
_InstancesOf(\"Win32_VideoController\")
For Each obj In wmiObjSet
Text1.Text = Text1.Text \" 顯卡信息:\" vbCrLf
Text1.Text = Text1.Text \"【顯卡】:\" obj.Name
Next
'操作系統
Set wmiObjSet = GetObject(\"winmgmts:_{impersonation Level=impersonate}\").
_InstancesOf(\"Win32_ OperatingSystem\")
For Each obj In wmiObjSet
Text1.Text = Text1.Text \" 操作系統信息:\" vbCrLf
Text1.Text = Text1.Text \"【操作系統】:\" obj.Caption vbCrLf
Next
從以上的程序代碼中可以看出,使用WMI對信息的提取都是使用了WIN32_類庫名,以下是系統常用信息的類庫名。
Win32_BIOSWin32_Keyboard
Win32_MotherboardDevice Win32_NetworkAdapter
Win32_PhysicalMemoryWin32_Processor
Win32_SoundDeviceWin32_VideoController
Win32_ OperatingSystem
4 結論
在VB中使用WMI獲得系統信息的方法是比較簡單和容易實現的,而且在VB中也可以采用相應API函數[8]來獲得系統信息,將兩者結合起來會得到更好的效果。
參考文獻:
[1] Microsoft.Windows Management Instrumentation[EB/OL].[2008-08-11].http://msdn.microsoft.com/_en-us/library//aa394582(VS.85).aspx.
[2] 姜勁松,吳禮發,張萍.基于WMI的系統管理的設計與實現[J].計算機應用,2004,24(3):16-18.
[3] 宋昕.WMI在計算機管理中的應用研究[J].電腦知識與技術,2008(11):370-371.
[4] 任映雪.基于WMI的腳本編程在機房維護管理中的應用[J].實驗科學與技術,2007,5(1):120-123.
[5] 張施展,高景昌.基于WMI技術的計算機自動化管理[J].吉林大學學報:信息科學版,2006,24(4):451-456.
[6] 沼澤.初窺WMI[J].黑客防線,2005(6):106-111.
[7] 四維科技,趙斯思.Visual Basic數據庫編程技術與實例[M].北京:人民郵電出版社,2004:40.
[8] 求是科技,劉韜,駱娟.Visual Basic實效編程百例[M].2版.北京:人民郵電出版社,2004:107-110.