大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 利用WMI获取系统信息

利用WMI获取系统信息

时间: 2021-07-31 作者:daque

     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东西的典型,这个典型赢得计划机的消息。    创造一个新工程,在form第11中学增添一个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东西中的分项赢得体例中的消息。 须要证明的是,并不是一切的体例都扶助wmi,在有些体例中没辙表露消费厂家等消息。     此刻的计划机以及搜集构成格外搀杂。比方体例硬件上面就有主板、硬盘、网卡... 。 软硬件上面有操纵体例、体例中安置的软硬件、正在运转的过程之类。搜集上面有域、处事组 之类。运用wmi不妨考察上头的十足消息,然而即使向上头一律的运用分项来考察的话会很 烦恼。为此,wmi供给了一种一致sql语句的查问语句,不妨经过查问语句赢得wmi东西下的子项。     底下是一个遍历体例中安置的网卡并归来网卡mac地方的代码: private function macaddress() as string    set objs = getobject("winmgmts:").execquery( _       "select macaddress " & _       "from win32_networkadapter " & _       "where " & _       "((macaddress is not null) " & _       "and (manufacturer <> " & _       "'microsoft'))")    for each obj in objs       macaddress = obj.macaddress       exit for    next obj end function     上头的代码赢得wmi东西,而后运转execquery实行一个wmi查问语句赢得安置的网卡并归来 网卡的mac地方。     wmi还扶助事变处置,让步调不妨处置体例事变,比方步调运转、封闭,可挪动启动器的插入、 掏出等。底下是一个不妨对体例中运路途序举行监察和控制的步调。     开始创造一个新工程,而后点击菜单的 project | references 项,在references列表当选中 microsoft wmi scripting library将wmi东西库介入工程中。而后在form第11中学介入一个listbox控件, 而后在form第11中学介入以次代码: 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在效劳器上监察和控制所有局域网上的计划机、向局域网上的计划机批量安置软硬件(比方杀毒软硬件)。经过页面长途考察效劳器,控件效劳器运路途序,增添用户等。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.