WMI(Windows Management Instrumentation,Windows 管理規范)是一項核心的 Windows 管理技術;用戶可以使用 WMI 管理本地和遠程計算機。
通過使用WMI,我們可以很方便的獲取到電腦的系統信息,但是很遺憾的是,我在網上找到的基本上都是對于某個功能的實現,比如查詢IP,獲取計算機名稱,檢測操作系統信息等等,如果只是在工作中用到了來查一下是沒有問題的,但是,要想全面的了解WMI中的類庫,來系統的掌握就很困難,WMI中有哪些系統的類,里面有哪些屬性,這些屬性都代表什么意思?MSND上面對于vbscript腳本實現的教程很詳細,但是具體在delphi中對應的類型和參數名稱是不一樣的。
先做一個通用一點的調用函數,具體的信息可以傳遞參數進來獲取到:
function GetWMIProperty(WMIType, WMIProperty: string): string; var Wmi, Objs, Obj: OleVariant;C: Cardinal;i,Len:integer;tempItem:IEnumVariant; beginWmi:= CreateOleObject('WbemScripting.SWbemLocator');Objs := Wmi.ConnectServer('.','root\cimv2').ExecQuery('Select * from Win32_' + WMIType);tempItem:=IEnumVariant(IUnknown(Objs._NewEnum));Result:='';while (tempItem.Next(1, obj, c) = S_OK) dobeginObj := Obj.Properties_.Item(WMIProperty, 0).Value;if not VarIsNull(obj) thenbeginResult :=Result +trim(Obj);break;end;end; end;
因為WMI中通用的類大多是Win32_開頭的,這里只需要傳遞后面的部分。
那么下一步,怎么知道我需要的是什么參數呢?以獲取計算機名為例:
str := GetWMIProperty('OperatingSystem','CSName');即可獲得。
當然,計算機名信息是比較常用的,在好幾個類里面都有。
Win32_開頭的類有:
Win32_IP4RouteTable
Win32_NetworkAdapterConfiguration
Win32_NetworkAdapterSetting
Win32_NetworkConnection
Win32_POTSModemToSerialPort
Win32_PrinterConfiguration
Win32_SerialPortConfiguration
Win32_SerialPortSetting
Win32_USBControllerDevice
Win32_VideoSettings