WMI编程资料.doc
《WMI编程资料.doc》由会员分享,可在线阅读,更多相关《WMI编程资料.doc(36页珍藏版)》请在咨信网上搜索。
1、VB 使用WMI编程 (零号)一、认识WMI 通常VB程序员经常抱怨VB在编制Windows系统软硬件设备控制方面的程序比较困难,即使能实现一些功能,那也是要通过调用繁复的API函数,即难找寻到合适的函数,又难以理解设置函数中的各项参数,尤其是调试异常困难,动不动整个程序连带VB环境一起死悄悄。此外,用API编程几乎完全抛弃了面向对象的编程方法,迫使我们回到过程方式的编程。那怎么办呢?_别急,微软在WIN2000系统中推出了VBScript脚本语言替代原来的批命令,同时提供了一个供VBScript管理Windows系统的对象WMI。那这个WMI对象我们VB能用吗?答案是肯定的,当然能用,而且用
2、起来还非常方便,在网上也已经有了一些VB写的利用WMI实现Windows系统管理编程的例程,但却缺少系统性介绍使用VB对WMI编程的资料。本文就针对此问题,进行一个尝试。当然要学习WMI编程,需要有一定的VB基础,但要求不高,只要会用控件、对象,能理解和使用对象的方法、属性,但不需要任何API方面的知识和编程经验。 首先我们要知道什么是WMI?WMI是Windows Management Instrumentation (Windows管理工具)的缩写,是内置在 Windows 2000、Windows XP 和 Windows Server 2003 系列操作系统中核心的管理支持技术。基于由
3、 Distributed Management Task Force (DMTF) 所监督的业界标准,WMI 是一种规范和基础结构,通过它可以访问、配置、管理和监视所有的 几乎所有的 Windows 资源。 呵呵,不要对这段文字进行咬文嚼字,通俗的讲,就是WMI是一个用于管理Windows系统的对象,就像ADO对象是用于数据库操作的。利用WMI我们可以管理Windows系统中的磁盘、事件日志、文件、文件夹、文件系统、网络组件、操作系统设置、性能数据、打印机、进程、注册表设置、安全性、服务、共享、用户、组等等。 而WMI适用的运得环境也是有些限制的, WMI 附带在 Windows Me、Win
4、dows 2000、Windows XP 和 Windows Server 2003 之中。对于 Windows 98 和 Windows NT 4.0,可以访问http:/.microsoft./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 或更
5、高版本。 2. Windows Script Host(WSH)。Windows 2000、Windows XP、Windows Server 2003、和 Windows Me 附带的 WSH,而不是 Windows NT4 或 Windows 98 附带的 WSH。您可以从以下地址下载 WSH http:/.microsoft./downloads. WSH 的最新版本 包括在 Windows XP 和 Windows Server 2003 之中是 WSH 5.6。 要使WMI脚本可以正常的运行,Windows里的WMI 服务(winmgmt)保证是运行的,这样才可以实现WMI里的更多功
6、能。好了,关于WMI的一些基本的信息资料就说到这,要想看更多的可以到MicroSoft网站的MSDN找。 大家都喜欢通过例程来学东西,那我们也先编一段程序来看看。不知道大家看到过没有本人在本论坛中曾经写过一篇“自己做进程管理器”的帖子,在那篇帖子里主要是采用API函数罗列出当前系统下正在运行的所有进程,下面我们利用WMI也来做一个进程管理器。首先建立一个新工程具有Form1窗体,在菜单中的【工程】【部件】下,添加“Microsoft Windows mon Controls 6.0”,在菜单中的【工程】【引用】下,添加“Microsoft WMI Scripting V1.1 Library”
7、,然后在Form1窗体上添加1个ListView1和mand1、mand2,在代码窗口添加如下代码(例程1):Option ExplicitDim objSWbemLocator As New SWbemLocatorDim objSWbemServices As SWbemServicesDim objSWbemObjectSet As SWbemObjectSetDim objSWbemObject As SWbemObjectPrivate Sub Form_Load() Me.Caption = 进程管理器 mand1.Caption = 刷新 mand2.Caption = 结束进程
8、 ListView1.ColumnHeaders.Clear ListView1.ColumnHeaders.Add , a, 进程ID, 600 ListView1.ColumnHeaders.Add , b, 进程名, 2000 ListView1.ColumnHeaders.Add , c, 路径, 6000 ListView1.View = lvwReport mand1_Click 刷新进程列表End SubPrivate Sub mand1_Click()Dim i As Long ListView1.ListItems.Clear 清空ListView Set objSWbemS
9、ervices = 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 将进程
10、ID添加到ListView1第一列 ListView1.ListItems(a & i).SubItems(1) = objSWbemObject.Name 将进程名添加到ListView1第二列 If Not IsNull(objSWbemObject.ExecutablePath) Then _ ListView1.ListItems(a & i).SubItems(2) = objSWbemObject.ExecutablePath 将进程路径添加到ListView1第三列 i = i + 1 Next Set objSWbemObjectSet = NothingEnd SubPriv
11、ate Sub mand2_Click()Dim TMBack As Long If ListView1.SelectedItem.Text Then If MsgBox(确实要结束进程 & ListView1.SelectedItem.SubItems(1) & 吗?, vbYesNo) = vbYes Then Set objSWbemObjectSet = objSWbemServices.ExecQuery(SELECT * FROM Win32_Process WHERE Handle = & ListView1.SelectedItem.Text & ) 查询Win32_Proce
12、ss类中Handle属性等于指定值的所有实例 For Each objSWbemObject In objSWbemObjectSet TMBack = objSWbemObject.Terminate 终止指定进程 Next If TMBack = 0 Then MsgBox ListView1.SelectedItem.SubItems(1) & 已经被终止! Else MsgBox ListView1.SelectedItem.SubItems(1) & 不能被终止! End If mand1_Click 刷新进程列表 End If End IfEnd Sub 呵呵,我们没有用任何系统的
13、API函数却千真万确的实现了进程管理这个系统级的应用,而且采用的是标准的面向对象的编程,其实这段代码仅仅实现了我们在前面提到的一篇“自己做进程管理器”的帖子中用API函数也能实现的功能。嗯?怎么?还能比这更强?哈哈,当然!下一讲我们分析该例程时,还会告诉各位,将该例程稍加修改,就可以在你的局域网中对任何一台WIN2000以上的计算机进行进程管理!晕!那不是我就能在我的局域网中为所欲为了吗?别急,那当然是有条件的,微软当然不会允许未经授权就可以随便控制其它的计算机的.二、VB中使用WMI的基本方法 上一讲我们初步了解了一下WMI,并在VB中使用WMI对象做了一个进程管理器,为加深各位的对WMI对
14、象引用方法的程序结构印象和增加兴趣,我们再举一个例子,就是枚举当前系统所有服务的名称、状态和启动类型等。与例程1一样,首先建立一个新工程具有Form1窗体,在菜单中的【工程】【部件】下,添加“Microsoft Windows mon Controls 6.0”,在菜单中的【工程】【引用】下,添加“Microsoft WMI Scripting V1.1 Library”,然后在Form1窗体上添加1个ListView1,在代码窗口添加如下代码(例程2):Option ExplicitDim objSWbemLocator As SWbemLocatorDim objSWbemServices
15、 As SWbemServicesDim objSWbemObjectSet As SWbemObjectSetDim objSWbemObject As SWbemObjectDim strputer As String, strNameSpace As String, strClass As StringPrivate Sub Form_Load()Dim i As Long Me.Caption = 服务 ListView1.ColumnHeaders.Clear ListView1.ColumnHeaders.Add , , 名称, 2600 ListView1.ColumnHeade
16、rs.Add , , 状态, 1000 ListView1.ColumnHeaders.Add , , 启动类型, 1000 ListView1.ColumnHeaders.Add , , 路径, 2600 ListView1.ColumnHeaders.Add , , 登录身份, 1400 ListView1.View = lvwReport strputer = . 计算机名,.为本机 strNameSpace = rootcimv2 指定命名空间为rootcimv2 strClass = Win32_Service指定类为Win32_Service Set objSWbemLocator
17、 = CreateObject(WbemScripting.SWbemLocator) 建立1个WBEM对象的引用指针 Set objSWbemServices = objSWbemLocator.ConnectServer(strputer, strNameSpace)连接到指定计算机、命名空间的WMI,返回一个对 SWbemServices 对象的引用 Set objSWbemObjectSet = objSWbemServices.ExecQuery(SELECT * FROM & strClass)通过WQL查询,返回指定类的所有实例 For Each objSWbemObject I
18、n objSWbemObjectSet ListView1.ListItems.Add , a & i, objSWbemObject.DisplayName 将服务名称添加到ListView1第一列 ListView1.ListItems(a & i).SubItems(1) = objSWbemObject.State 将服务的状态添加到ListView1第二列 ListView1.ListItems(a & i).SubItems(2) = objSWbemObject.StartMode 将服务的启动方式添加到ListView1第三列 ListView1.ListItems(a & i
19、).SubItems(3) = objSWbemObject.PathName 将服务程序的路径添加到ListView1第四列 ListView1.ListItems(a & i).SubItems(4) = objSWbemObject.StartName 将服务的登录身份添加到ListView1第五列 i = i + 1 Next Set objSWbemObject = Nothing Set objSWbemObjectSet = NothingEnd Sub 嘿,我们运行这个例程后,果然把自己计算机上所有的服务都列了出来,并且还知道这些服务目前的运行状态以及服务程序所在的目录和执行文
20、件名。美中不足的是似乎我们不能停止或启动某个服务,不要急,其实可以很方便的就增加停止或启动某个服务的功能,但因为本节主要是要讨论VB中使用WMI的基本方法,因此故意省略了其它一些功能的实现。 闲话少说言规正传,现在我们就开始讨论一下VB中使用WMI的基本方法。例程2与例程1相比,除了功能不一样外,精简了程序结构,因此我们就以例程2的结构为主进行讨论。 我们先来观察一下例程1和例程2,可以看到它们都添加了“Microsoft WMI Scripting V1.1 Library”的引用,这个对象库(以下简称WMI脚本对象库)就是我们在VB的WMI编程中所要依赖的。再看一下程序的定义部分和整个程序
21、的首次执行过程,它们基本相同:都定义了SwbemLocator、SwbemServices、SwbemObjectSet、SwbemObject对象;创建了SwbemLocator指针实例;通过SwbemLocator指针连接到WMI服务;检索一个 WMI 托管资源;枚举托管资源中的每个实例;显示各实例的一些属性。其实这些步骤对于任何用于检索 WMI 托管资源信息的程序来说都是共同的,下面我们就详细的分析一下各步骤。 1)创建SwbemLocator指针 创建SwbemLocator指针的目的是为了建立一个引用WMI对象的实例,然后用这个实例操作WMI。有没有注意到,例程1和例程2创建Swbe
22、mLocator指针稍有不同,例程1是在定义处用Dim objSWbemLocator As New SwbemLocator定义语句直接创建了,而例程2是在执行过程Form_Load中用Set objSWbemLocator = CreateObject(WbemScripting.SWbemLocator)语句创建的,其实可以将这条语句简化为Set objSWbemLocator = New SwbemLocator来创建。不管用哪种方式创建SwbemLocator指针,都不影响下面的步骤。SwbemLocator指针对象只有1个只读属性Security_(其实也是一个对象)和1个方法Co
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WMI 编程 资料
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。