WMI(Windows Management Instrumentation)技术是微软提供的Windows下的系统管理工具。通过该工具可以在本地或者管理客户端系统中几乎一切的信息。很多专业的网络管理工具都是基于WMI开发的。该工具在Win2000以及WinNT下是标准工具,在Win9X下是扩展安装选项。本文将介绍如何通过VB编程来访问WMI对象的编程。
首先来看一个简单的通过WMI获取系统信息的范例,这个范例通过WMI对象获得系统中运行的的进程:
Function Enum1() As String Dim WMI
Set WMI = GetObject('WinMgmts:') Set objs = WMI.InstancesOf('Win32_Process')
For Each obj In objs Enum1 = Enum1 + obj.Description + Chr(13) + Chr(10) NextEnd Function
在上面的代码中,首先通过 GetObject('WinMgmts:')获得WMI对象,在WMI对象下有很多的子项,在这里我们通过WMI.InstancesOf('Win32_Process')获得系统中所有的进程列表子项。
下面看一个完整的访问WMI对象的范例,这个范例获得计算机的信息。 建立一个新工程,在Form1中添加一个TextBox控件以及一个CommandButton控件,在CommandButton的Click事件中写入以下的代码:
Private Sub Command1_Click() Dim s, System, item Dim i As Integer
Set System = GetObject('winmgmts:').InstancesOf('Win32_ComputerSystem') For Each item In System 'List1.AddItem item.cputype s = 'Computer Info' & vbCrLf s = s & '***********************' & vbCrLf s = s & '计算机名称: ' & item.name & vbCrLf
s = s & '状态: ' & item.Status & vbCrLf
s = s & '类型: ' & item.SystemType & vbCrLf
s = s & '生产厂家: ' & item.Manufacturer & vbCrLf
s = s & '型号: ' & item.Model & vbCrLf
s = s & '内存: ~' & item.totalPhysicalMemory \ 1024000 & 'mb' & vbCrLf
s = s & '域: ' & item.domain & vbCrLf
's = s & '工作组' & item.Workgroup & vbCrLf '获得工作组和域的选项不能同时用
s = s & '当前用户: ' & item.username & vbCrLf
s = s & '启动状态' & item.BootupState & vbCrLf
s = s & '该计算机属于' & item.PrimaryOwnerName & vbCrLf
s = s & '系统类型' & item.CreationClassName & vbCrLf
s = s & '计算机类类型' & item.Description & vbCrLf
For i = 0 To 1 '这里假设安装了两个系统
s = s & Chr(5) & '启动选项' & i & ' :' & item.SystemStartupOptions(i) _
& vbCrLf
Next i
Next
Text1.Text = s
End Sub
运行程序,点击Command1,在textBox中就可以显示计算机的信息。
在上面的代码中,程序通过GetObject('winmgmts:')获得WMI对象,然后获得下面的
Win32_ComputerSystem子项并通过访问Win32_ComputerSystem对象中的分项获得系统中的信息。