VB 使用WMI编程(一)

本文是VB使用Windows Management Instrumentation (WMI)进行系统管理编程的入门教程,介绍了WMI的基本概念、架构和核心组件,如CIMOM、CIM储存库、WMI脚本对象库。通过示例展示了如何使用WMI对象进行进程管理和服务枚举,揭示了WMI在VB中的使用方法,包括连接到WMI服务的Moniker名字法。文章指出,WMI提供了一种统一的方式来访问和管理Windows资源,如进程、服务、磁盘等,而无需依赖API函数,简化了面向对象的编程。
摘要由CSDN通过智能技术生成

由底至上是:
          • 托管资源

          • WMI 基础结构

          • 使用者

托管资源
    托管资源是任意逻辑或物理组件,通过使用 WMI 进行公开和管理。可以使用 WMI 管理的 Windows 资源包括:计算机系统、磁盘、外围设备、事件日志、文件、文件夹、文件系统、网络组件、操作系统子系统、性能计数器、打印机、进程、注册表设置、安全性、服务、共享、SAM 用户和组、Active Directory、Windows 安装程序、Windows 驱动程序模式 (WDM) 设备驱动程序,以及 SNMP 管理信息基 (MIB) 数据等。WMI 托管资源通过一个提供程序与 WMI 通讯。
WMI 基础结构
    中间层是 WMI 基础结构。WMI 由四个主要组件构成:公共信息模型对象管理器(Common Information Model Object Manager,CIMOM)、公共信息模型(Common Information Model,CIM)储存库,以及提供程序。这三个 WMI 组件共同提供通过其定义、公开、访问和检索配置和管理数据的基础结构,为了叙述和理解方便,我们在本文中就将这三个组件通称为CIM储存库。第四个组件是 WMI 脚本对象库,就是我们前面几个例程都必须引用的“Microsoft WMI Scripting V1.1 Library”对象库,就我们来说 — 就是使用者,首先就是通过WMI 脚本库与CIM储存库打交道去管理系统的各种托管资源。因此我们重点关注的应该是CIM储存库和WMI脚本对象库。
CIM 储存库
    WMI 的基本思想是 — 可以用一个架构统一表示来自不同源的配置和管理信息。CIM 就是这个架构,还调用了模型化托管环境和定义每个由 WMI 公开的数据块的对象储存库或类存储。该架构基于 DMTF 公共信息模型标准。
    CIM 由类 组成。类是一个 WMI 托管资源的一个模型。CIM 类通常表示动态资源,就是说托管资源的实例并不存储在 CIM 中,而是通过基于使用者请求的提供程序动态检索。其原因很简单,大多数 WMI 托管资源的操作状态更改很频繁,因而必须按需读取以确保检索的是最新的信息,就象我们例程1中的进程和例程2中的服务随时都在变动的。
    注在 CIM 的上下文中,储存库这一术语有些被误解。尽管 CIM 是一个储存库,而且能够存储静态数据,但其主要角色是存储托管资源的模型。
    CIM 类是分级组织的,每一级的子类从父类继承。DMTF 维护一组核心和公共基类,系统和应用程序软件开发人员(如 Microsoft 的那些)从这些类派生和创建系统(或应用程序)特定的扩展类。
    类被分组到命名空间 中,命名空间是表示一个特定的管理区域的类逻辑组。例如,命名空间 root/cimv2 包括大部分表示通常与计算机和操作系统相关联的资源的类。在前面的例程中使用的类(Win32_Process、Win32_Service 和为Win32_ShortcutFile)驻留在命名空间 root/cimv2,它们只是在 CIM 中定义的数百个类中的三个。
    CIM 类由属性和方法构成。属性描述 WMI 托管资源的配置和状态,方法是在 WMI 托管资源上执行操作的可执行函数。
    注 不要将由 CIM 定义的方法和属性与由 WMI 脚本对象库中的自动化对象提供的方法和属性相混淆。
WMI 脚本对象库
    WMI 脚本对象库提供一组应用对象集,WMI 脚本对象库中的这些对象为 WMI 基础结构提供一个一致且统一的模型。如前面所示,一旦您了解如何使用 WMI 脚本对象库检索一个托管资源类型,您就可以轻松使用相同的步骤来检索其它的 WMI 托管资源。例如,您可以使用前面列出的 5个例程中的任何一个,并很容易地修改这个脚本来检索在远程计算机上的事件日志记录 (Win32_NTLogEvent) 信息、处理器 (Win32_Processor) 信息、操作系统 (Win32_OperatingSystem) 信息,或者由 WMI 公开的数百个托管资源中的任何一个。
使用者
      使用者就是利用WMI的人,就是我们喽,或者说是可以利用WMI编程的程序语言,就不多说了
    本节就到这里吧,下一讲我们详细分析一下CIM的结构。


一、认识WMI
    通常VB程序员经常抱怨VB在编制Windows系统软硬件设备控制方面的程序比较困难,即使能实现一些功能,那也是要通过调用繁复的API函数,即难找寻到合适的函数,又难以理解设置函数中的各项参数,尤其是调试异常困难,动不动整个程序连带VB环境一起死悄悄。此外,用API编程几乎完全抛弃了面向对象的编程方法,迫使我们回到过程方式的编程。那怎么办呢?^_^别急,微软在WIN2000系统中推出了VBScript脚本语言替代原来的批命令,同时提供了一个供VBScript管理Windows系统的对象WMI。那这个WMI对象我们VB能用吗?答案是肯定的,当然能用,而且用起来还非常方便,在网上也已经有了一些VB写的利用WMI实现Windows系统管理编程的例程,但却缺少系统性介绍使用VB对WMI编程的资料。本文就针对此问题,进行一个尝试。当然要学习WMI编程,需要有一定的VB基础,但要求不高,只要会用控件、对象,能理解和使用对象的方法、属性,但不需要任何API方面的知识和编程经验。
    首先我们要知道什么是WMI?WMI是Windows Management Instrumentation (Windows管理工具)的缩写,是内置在 Windows 2000、Windows XP 和 Windows Server 2003 系列操作系统中核心的管理支持技术。基于由 Distributed Management Task Force (DMTF) 所监督的业界标准,WMI 是一种规范和基础结构,通过它可以访问、配置、管理和监视所有的 — 几乎所有的 Windows 资源。
    呵呵,不要对这段文字进行咬文嚼字,通俗的讲,就是WMI是一个用于管理Windows系统的对象,就像ADO对象是用于数据库操作的。利用WMI我们可以管理Windows系统中的磁盘、事件日志、文件、文件夹、文件系统、网络组件、操作系统设置、性能数据、打印机、进程、注册表设置、安全性、服务、共享、用户、组等等。
    而WMI适用的运得环境也是有些限制的, WMI 附带在 Windows Me、Windows 2000、Windows XP 和 Windows Server 2003 之中。对于 Windows 98 和 Windows NT 4.0,可以访问http://www.microsoft.com/downloads并搜索“Windows Management Instrumentation (WMI) CORE 1.5 (Windows 95/98/NT 4.0)”。注意:在 Windows NT 4.0 上安装并运行 WMI 之前,需要首先安装 Service Pack 4 或更高版本。
WMI 需要的其他软件包括:
    1. Microsoft Internet Explorer 5.0 或更高版本。
    2. Windows Script Host(WSH)。Windows 2000、Windows XP、Windows Server 2003、和 Windows Me 附带的 WSH,而不是 Windows NT4 或 Windows 98 附带的 WSH。您可以从以下地址下载 WSH http://www.microsoft.com/downloads. WSH 的最新版本—— 包括在 Windows XP 和 Windows Server 2003 之中——是 WSH 5.6。
    要使WMI脚本可以正常的运行,Windows里的WMI 服务(winmgmt)保证是运行的,这样才可以实现WMI里的更多功能。好了,关于WMI的一些基本的信息资料就说到这,要想看更多的可以到MicroSoft网站的MSDN找。
    大家都喜欢通过例程来学东西,那我们也先编一段程序来看看。不知道大家看到过没有本人在本论坛中曾经写过一篇“自己做进程管理器”的帖子,在那篇帖子里主要是采用API函数罗列出当前系统下正在运行的所有进程,下面我们利用WMI也来做一个进程管理器。首先建立一个新工程具有Form1窗体,在菜单中的【工程】—【部件】下,添加“Microsoft Windows Common Controls 6.0”,在菜单中的【工程】—【引用】下,添加“Microsoft WMI Scripting V1.1 Library”,然后在Form1窗体上添加1个ListView1和Command1、Command2,在代码窗口添加如下代码(例程1):

Option Explicit

Dim objSWbemLocator As New SWbemLocator
Dim objSWbemServices As SWbemServices
Dim objSWbemObjectSet As SWbemObjectSet
Dim objSWbemObject As SWbemObject

Private Sub Form_Load()
    Me.Caption = "进程管理器"
    Command1.Caption = "刷新"
    Command2.Caption = "结束进程"
    ListView1.ColumnHeaders.Clear
    ListView1.ColumnHeaders.Add , "a", "进程ID", 600
    ListView1.ColumnHeaders.Add , "b", "进程名", 2000
    ListView1.ColumnHeaders.Add , "c", "路径", 6000
    ListView1.View = lvwReport
    Command1_Click '刷新进程列表
End Sub

Private Sub Command1_Click()
Dim i As Long
    ListView1.ListItems.Clear '清空ListView
    Set objSWbemServices = objSWbemLocator.ConnectServer()  '连接到本机的WMI,返回一个对 SWbemServices 对象的引用
    Set objSWbemObjectSet = objSWbemServices.InstancesOf("Win32_Process")   '返回Win32_Process类名标识的所有实例
    i = 0
    For Each objSWbemObject In objSWbemObjectSet  '枚举每一个Win32_Process的实例
        ListView1.ListItems.Add , "a" & i, objSWbemObject.Handle '将进程ID添加到ListView1第一列
        ListView1.ListItems("a" & i).SubItems(1) = objSWbemObject.Name '将进程名添加到ListView1第二列
        If Not IsNull(objSWbemObject.ExecutablePath) Then _
       

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值