科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Visual Basic编程访问WMI对象

Visual Basic编程访问WMI对象

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

WMI技术是微软提供的Windows下的系统管理工具

作者:maqiaos_cn 来源:vb新世纪 2007年10月14日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
WMI还支持事件处理,让程序可以处理系统事件,例如程序运行、关闭,可移动驱动器的插入、取出等。下面是一个可以对系统中运行程序进行监控的程序。

  首先建立一个新工程,然后点击菜单的 project | references 项,在references列表中选中Microsoft WMI Scripting Library将WMI对象库加入工程中。然后在Form1中加入一个ListBox控件,然后在Form1中加入以下代码:

Option Explicit

Dim Locator As SWbemLocator
Dim Services As SWbemServices
Dim WithEvents StatusSink As SWbemSink

Private Sub KillEvents()
 StatusSink.Cancel
 Set StatusSink = Nothing
End Sub

Private Sub Form_Load()
 Dim Query As String

 Set StatusSink = New SWbemSink
 Set Locator = CreateObject("WbemScripting.SWbemLocator")
 Set Services = Locator.ConnectServer()

 Query = "SELECT * FROM __InstanceCreationEvent "
 Query = Query + "WITHIN 1 "
 Query = Query + "WHERE TargetInstance ISA ‘Win32_Process‘"

 Services.ExecNotificationQueryAsync StatusSink, Query
End Sub

Private Sub StatusSink_OnObjectReady(ByVal StatusEvent As SWbemObject, _
ByVal EventContext As SWbemNamedValueSet)

 Dim arr
 Dim strQue As String
 Dim i As Integer

 List1.Clear
 arr = Split(StatusEvent.GetObjectText_, Chr(10))
 For i = LBound(arr) To UBound(arr)
  List1.AddItem arr(i)
 Next i
End Sub

Private Sub StatusSink_OnCompleted(ByVal HResult As WbemErrorEnum, _
ByVal ErrorObject As SWbemObject, _
ByVal EventContext As SWbemNamedValueSet)

If HResult <> wbemErrCallCancelled Then
‘错误处理
End If
End Sub

  在上面的程序中定义了一个SWbemSink对象StatusSink,然后建立一个SWbemServices对象Server,并将StatusSink连接到Server对象上。这样就可以通过StatusSink监控程序的运行。

  运行程序,然后任意运行一个程序,在Form1的ListBox中就可以列出运行的程序的信息。

  WMI应用最强大的一面是可以通过WEB页面来实现远程管理。下面我们来建立一个HTML页面,该页面可以实现向上面的VB程序一样动态监控系统中运行的程序。监控系统中程序运行的HTML代码如下:

<html>
<head>
<object ID="mysink" CLASSID= "CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223"></object>
</head>
<SCRIPT>
 function window.onload()
 {
  var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
  var service = locator.ConnectServer();
  szQuery = "SELECT * FROM __InstanceCreationEvent ";
  szQuery += "WITHIN 1 ";
  szQuery += "WHERE TargetInstance ISA ‘Win32_Process‘";
  service.ExecNotificationQueryAsync(mysink,szQuery);
 }
</SCRIPT>
<script FOR="mysink" EVENT="OnObjectReady(obj, objAsyncContext)">
 document.all.info.innerHTML += obj.TargetInstance.Name + "<br>";
</script>
<body>
 <span ID="info"></span>
</body>
</html>

  保存代码为Htm后缀的页面文件。双击打开网页,然后运行一个程序,在网页上就可以列出运行的程序的文件名。

  以上简要的介绍了一下WMI的应用,实际上WMI对象的操作是十分复杂,功能也是很强大的,例如你可以通过WMI在服务器上监控整个局域网上的计算机、向局域网上的计算机批量安装软件(例如杀毒软件)。通过页面远程访问服务器,控件服务器运行程序,添加用户等。关于更多的WMI的应用,读者可以访问MSDN上WMI开发的主页:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmistart_5kth.asp

  获取更多信息。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章