使用WMI得到计算机的信息

原创 2004年03月12日 14:21:00

使用WMI得到计算机的信息

WMI是一项行业推荐规范,旨在为访问企业环境中的管理信息而开发一种标准化技术。该信息包括系统内存的状态、当前安装的客户应用程序清单,以及有关客户端状态的其他数据。
WMI是可伸缩的系统管理结构,该规范采用一个统一、基于标准且可扩展的面向对象接口。它提供与系统管理员信息和基础WMI API交互的标准方法,主要由系统管理应用程序开发人员和系统管理员用来访问和操作系统管理信息。
WMI可用来生成组织和管理系统信息的工具,使系统管理人员能够更密切的监视系统活动。
WMI提供了一套内置在Microsoft Windows操作系统中的丰富的系统管理服务,现在有大量的应用程序、服务和设备用其为信息技术操作和产品支持组织提供全方位的管理功能。基于WMI的管理系统的使用带来了更可靠的计算环境和更高的系统可靠性,从而节省了企业的开销。
WMI提供的大量的规范为许多高端应用程序,例如Microsoft Exchange、Microsoft SQL Server和Microsoft Internet信息服务(IIS)等实现如下管理任务。
1. 监视应用程序的运行情况
2.  检测瓶颈或故障
3.  管理和配置应用程序
4.  查询应用程序数据(使用对象关系的遍历和查询)
5.  执行无缝的本地或远程管理操作
 
下面我们通过一个例子来说明WMI的强大功能。以vb6为列:
引用”Microsoft WMI Scripting V1.1 Library”
代码如下:
Option Explicit
Dim WithEvents Sink As SWbemSink
Dim j As Integer
'功能:利用wmi组件得到计算机的信息,每一个小功能分开写,便于大家查阅
 
Private Sub cmdDone_Click()
Dim oWMINameSpace As SWbemServices
Dim oLogicalDiskSet As SWbemObjectSet
Dim oLogicalDisk As SWbemObject
 
Dim ObjSet As Variant
Dim sDrive As String
Dim sValue As String
Dim dblSize As Double
Dim Obj As Variant
 
Dim lIndex As Long
 
Set oWMINameSpace = GetObject("winmgmts:")
 
'得到驱动器的信息
On Error Resume Next
Set ObjSet = oWMINameSpace.InstancesOf("Win32_DiskDrive")
 
For Each Obj In ObjSet
  List5.AddItem Obj.Caption & " - " & BytesToMegabytes(Obj.Size) & " GB"
Next
 
 
'得到每一个驱动器的详细信息
On Error GoTo ErrorHandler
'Set oWMINameSpace = GetObject("winmgmts:")
Set oLogicalDiskSet = oWMINameSpace.InstancesOf("Win32_LogicalDisk")
For Each oLogicalDisk In oLogicalDiskSet
    On Error Resume Next
  
    sDrive = oLogicalDisk.deviceid
   
    ListView1.ListItems.Add , , sDrive
    lIndex = ListView1.ListItems.Count
   
    sValue = oLogicalDisk.Description & ""
    ListView1.ListItems(lIndex).SubItems(1) = sValue
 
    sValue = oLogicalDisk.FileSystem & ""
    ListView1.ListItems(lIndex).SubItems(2) = sValue
   
    sValue = oLogicalDisk.VolumeName & ""
    ListView1.ListItems(lIndex).SubItems(3) = sValue
   
    sValue = oLogicalDisk.VolumeSerialNumber & ""
    ListView1.ListItems(lIndex).SubItems(4) = sValue
   
    sValue = oLogicalDisk.Size & ""
    If IsNumeric(sValue) Then
        dblSize = BytesToMegabytes(CDbl(sValue))
        sValue = CStr(dblSize) & " MB"
    End If
   
    ListView1.ListItems(lIndex).SubItems(5) = sValue
Next
   
 
 
CleanUp:
Set oLogicalDisk = Nothing
Set oLogicalDiskSet = Nothing
Set oWMINameSpace = Nothing
Exit Sub
 
ErrorHandler:
MsgBox "" & Err.Description
 
GoTo CleanUp
 
End Sub
 
Private Sub Command1_Click()
Unload Me
End Sub
 
Private Function BytesToMegabytes(Bytes As Double) As Double
  Dim dblAns As Double
  dblAns = (Bytes / 1024) / 1024
  BytesToMegabytes = Format(dblAns, "###,###,##0.00")
End Function
 
Private Sub Command2_Click()
Dim oWMINameSpace As SWbemServices
Dim SystemSet As Variant
Dim System As Variant
Dim ObjSet As Variant
Dim Obj As Variant
 
 
Set oWMINameSpace = GetObject("winmgmts:")
'操作系统
Set SystemSet = oWMINameSpace.InstancesOf("Win32_OperatingSystem")
 
For Each System In SystemSet
    List1.AddItem System.Caption
    List1.AddItem System.Manufacturer
    List1.AddItem System.BuildType & “”  ‘Win9x下好像取不出来
    List1.AddItem System.Version
    List1.AddItem System.SerialNumber
Next
'cpu
Set ObjSet = oWMINameSpace.InstancesOf("Win32_Processor")
 
For Each Obj In ObjSet
    List2.AddItem Obj.Caption
    List2.AddItem Obj.currentclockspeed & " Mhz"
Next
 
End Sub
 
Private Sub Command3_Click()
Dim oWMINameSpace As SWbemServices
Dim ObjSet As Variant
Dim Obj As Variant
Dim Adapter As Variant
 
'内存
Set oWMINameSpace = GetObject("winmgmts:")
Set ObjSet = oWMINameSpace.InstancesOf("Win32_PhysicalMemory")
Dim i As String
 
For Each Obj In ObjSet
    List3.AddItem BytesToMegabytes(Obj.capacity) & " MB" & " Chip"
Next
 
'网卡
Set Sink = New SWbemSink
   
Set Adapter = GetObject("winmgmts:")
Adapter.InstancesOfAsync Sink, "Win32_NetworkAdapter"
 
End Sub
 
Private Sub Form_Load()
j = 0
End Sub
 
Private Sub Sink_OnObjectReady(ByVal objWbemObject As WbemScripting.ISWbemObject, ByVal objWbemAsyncContext As WbemScripting.ISWbemNamedValueSet)
 
Dim Adapter As Variant
‘得到所有的适配器信息
Set Adapter = GetObject("winmgmts:Win32_NetworkAdapterConfiguration=" & j & "")
 
List4.AddItem Adapter.Description
 
If IsNull(Adapter.MACAddress) Then
    List4.AddItem "No MAC Address"
    List4.AddItem ""
Else
    List4.AddItem "Mac: " & Adapter.MACAddress
    List4.AddItem ""
End If
 
j = j + 1
End Sub
 
当执行后,出现如下所示:
 
是不是感到了WMI功能的强大。(完)
注明:Windows2000/XP已经安装了WMI。Win98默认不支持,需要安装WMI For Win9x驱动。下载地址:
http://www.microsoft.com/downloads/details.aspx?FamilyID=98a4c5ba-337b-4e92-8c18-a63847760ea5&DisplayLang=en

硬盘SMART信息数据结构

在Windows环境下我知道有两种方法可以读取硬盘SMART信息:一是通过DeviceIoControl这个Win API,还有就是通过wql语句查询。这两种方法已经在网上被说烂,本文主要要记录一个找...
  • cracker_zhou
  • cracker_zhou
  • 2017年06月16日 18:17
  • 1414

玩转WMI --- 用脚本获取硬盘传感器温度和SMART讯息

遍历了一下wmi内有专门的类对象
  • u014183302
  • u014183302
  • 2014年11月19日 21:34
  • 2772

wmi协议支持远程执行cmd命令,并返回获取命令相关信息

wmi协议支持远程执行cmd命令,并返回获取命令相关信息
  • wszzia
  • wszzia
  • 2016年03月11日 15:45
  • 3119

WMI技术介绍和应用——查询文件夹信息

本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。         本节主要介绍Win32_Directo...
  • breaksoftware
  • breaksoftware
  • 2013年01月11日 20:08
  • 4990

【WMI】WMI For C++/COM 获取系统信息过程

使用WMI获取系统信息过程我们以获取本机系统为例,获取系统信息的过程如下:1)初始化COM库        由于用C++编写WMI应用是基于COM技术的,所以必须初始化COM库,这时调用函数CoIni...
  • Xscarlet
  • Xscarlet
  • 2007年08月22日 21:30
  • 4687

WMI获取硬件信息

#define _WIN32_DCOM   #define _WIN32_WINNT   0X0500       #include    #include    #include    ...
  • bing87496988
  • bing87496988
  • 2014年10月09日 10:06
  • 4779

编程使用WMI 控制连接属性

标题    编程使用WMI 控制连接属性    ArLi2003(原作) 关键字    编程使用WMI 控制连接属性,IP,DNS,Gateway,网关,WMIusing System;using S...
  • stdotleo
  • stdotleo
  • 2004年08月14日 00:16
  • 752

学习笔记 -- 使用WMI获得系统信息

学习笔记 -- 使用WMI获得系统信息WMI是Windows 2K/XP管理系统的核心。WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model ...
  • Flood1984
  • Flood1984
  • 2007年12月03日 15:25
  • 3624

WMI获取系统信息 得到product name

利用WMI获取系统信息, 一般步骤: 1. 通过调用CoInitialzeEx来初始化COM参数. 2. 通过调用CoInitializeSecurity来初始化COM过程安全. ...
  • liyun123gx
  • liyun123gx
  • 2014年02月12日 17:47
  • 825

Windows客户端开发--使用WMI获取显卡详细信息(win32控制台程序)

昨天接受了WMI的基础知识,因为自己也是刚刚接触,也是应用型的,没有研究的更深更透。今天,就写一个真是的例子吧。比如说,我们要获得计算机显示适配器的详细信息,包括显卡的型号,显卡驱动的版本号,以及显卡...
  • wangshubo1989
  • wangshubo1989
  • 2016年07月08日 00:09
  • 6271
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用WMI得到计算机的信息
举报原因:
原因补充:

(最多只允许输入30个字)