VBS脚本写的Windows硬件检测工具分享
2016-06-30来源:

这篇文章主要介绍了VBS脚本写的Windows硬件检测工具分享,本文直接给出脚本源码和运行效果图,需要的朋友可以参考下

Const MyName = "Windows硬件检视工具(测试版) --by:Rex.Pack(雷克斯.派)"

If Not LCase(Replace(WScript.FullName, WScript.Path & "\", "")) = "cscript.exe" Then

    Set WS = CreateObject("WScript.Shell")

    WS.Run "CMD /c mode con: cols=115 & Color 0A & Title " & MyName & " & CScript //nologo """ & WScript.ScriptFullName & """"

    WScript.Quit

End If

'----初始化

Set SD = CreateObject("Scripting.Dictionary")

    SD.CompareMode = vbTextCompare

Set S = New BaseStr

Set PC = New BasePC

Set WMI = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

CmdArr = Split(" OS CPU Board Memory Video Disk USB CacheMemory NetWork BIOS Sound Battery PortableBattery" & " S1 S2 S3 S4")

With SD

    .Add "?", "Call Menu"

    .Add "e", "WScript.Quit"

    For I = 1 To 17

        .Add CStr(I), CmdArr(I)

    Next

    .Add "a", "1-6"

    .Add "b", "7-9"

    .Add "c", "10-13"

    .Add "d", "14-17"

End With

Echo MyName

Call Menu

Call Main

'----CO

Sub Menu()

    Echo "[设备列表]"

    Echo " 常用组 A: 1.OS  2.CPU   3.主板    4.内存    5.显卡    6.硬盘"

    Echo " 次级组 B: 7.USB 8.缓存    9.网卡"

    Echo " 酱油组 C: 10.BIOS   11.声卡   电池(12.内部 13.便携)"

    Echo "[测试CPU]"

    Echo " 测试组 D: 14.变量幂次方运算    15.字符叠合 16.加法计算 17.叠加计算"

End Sub

Sub Main()

    Print ">": GetNum = Trim(InPut)

    With SD

        If .Exists(GetNum) Then

            If IsNumeric(GetNum) Then

                Echo Eval("PC." & .Item(GetNum))

            Else

                ArrLU = Split(.Item(GetNum), "-")

                For L = ArrLU(0) To ArrLU(1)

                    Echo Eval("PC." & .Item(CStr(L)))

                Next

            End If

        Else

            Echo "#不支持的命令"

        End If

    End With

    If Not Err.Number = 0 Then Echo ">X": Err.Clear

    Call Main

End Sub

'DDC

Class BaseStr

    Private Strs

    Private Sub Class_Initialize()

        Strs = ""

    End Sub

    Private Sub Class_Terminate()

        Call Cls

    End Sub

    Public Sub Cls()

        Strs = Empty

    End Sub

    Public Property Let I(ByVal Str)

        If Left(Str, 1) = "☆" Then Str = Str & String(80, "=")

        Strs = Strs & vbCrLf & Str

    End Property

    Public Default Property Get I()

        I = Strs

        Cls

    End Property

End Class

Class BasePC

    Private DPS

    Private Sub Class_Initialize()

        DPS = 200

    End Sub

    Private Sub Class_Terminate()

        DPS = Empty

    End Sub

    Function S1()

        S1 = "变量幂次方运算 " & DPS & "万次用时:" & RT("TestVar = I ^ 2", DPS * 10000)

    End Function

    Function S2()

        S2 = "字符叠合 " & DPS & "000次用时:" & RT("TestVar = TestVar & vbTab", DPS * 1000)

    End Function

    Function S3()

        S3 = "加法计算 " & DPS & "万次用时:" & RT("TestVar = 86 + 32", DPS * 10000)

    End Function

    Function S4()

        S4 = "叠加计算 " & DPS & "万次用时:" & RT("TestVar = TestVar + I", DPS * 10000)

    End Function

    Private Function RT(ByVal MathExp, ByVal Num)

        Dim NowTimer, NewTimer, TestVar

        NowTimer = Timer

        For I = 1 To Num

            ExeCute MathExp

        Next

        NewTimer = FormatNumber((Timer - NowTimer) * 1000, 3, True, , False) & "ms"

        RT = NewTimer

        TestVar = Empty

    End Function

    Function BIOS()

        On Error Resume Next

        S.I = "☆[BIOS]"

        S.I = "┏━━━━━━━━━━━━━┉"

        For Each TempObj In WMI.InstancesOf("Win32_BIOS")

            With TempObj

                S.I = "┣厂商      :" & .Manufacturer

                S.I = "┇日期      :" & .ReleaseDate

                S.I = "┇OEM 版本  :" & .Version

                S.I = "┇BIOS 版本 :" & .SMBIOSBIOSVersion

                S.I = "┇Major版本 :" & .SMBIOSMajorVersion

                S.I = "┇状态      :" & .Status

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━┉"

        BIOS = S

    End Function

    Function OS()

        On Error Resume Next

        S.I = "☆[操作系统]"

        S.I = "┏━━━━━━━━━━━━━┉"

        For Each TempObj in WMI.InstancesOf("Win32_OperatingSystem")

            With TempObj

                S.I = "┣标签  :" & .Caption

                S.I = "┇CSDV  :" & .CSDVersion

                S.I = "┇版本  :" & .Version

                S.I = "┇RAM识别:" & .TotalVisibleMemorySize / 1024 & "MB"

                S.I = "┇RAM可用:" & .FreePhysicalMemory / 1024 & "MB"

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━┉"

        OS = S

    End Function

    Function Board()

        On Error Resume Next

        S.I = "☆[主板]"

        S.I = "┏━━━━━━━━━━━━━┉"

        For Each TempObj In WMI.InstancesOf("Win32_BaseBoard")

            With TempObj

                S.I = "┣标签:" & .Caption

                S.I = "┇编号:" & .Product

                S.I = "┇序号:" & .SerialNumber 

                S.I = "┇名称:" & .Name

                S.I = "┇版本:" & .Version

                S.I = "┇厂商:" & .Manufacturer

                S.I = "┇状态:" & .Status

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━┉"

        Board = S

    End Function

    Function CPU()

        On Error Resume Next

        S.I = "☆[CPU]"

        S.I = "┏━━━━━━━━━━━━━┉"

        For Each TempObj In WMI.InstancesOf("Win32_Processor")

            With TempObj

                MCS = .MaxClockSpeed

                CCS = .CurrentClockSpeed

                If MCS Mod 2 = 1 Then MCS = CCS + 1

                If CCS Mod 2 = 1 Then CCS = CCS + 1

                If CCS = MCS Then

                    Set SRP = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")

                    SRP.GetDWORDValue &H80000002, "HARDWARE\DESCRIPTION\System\CentralProcessor\0", "~MHz", OC

                    Set SRP = Nothing

                Else

                    OC = CCS

                End If

                If OC Mod 2 = 1 Then OC = OC + 1

                FC = OC - MCS

                If FC > +10 Then OCLC = "超"

                If FC < -10 Then OCLC = "降"

                OCLC = OCLC & "频比率:" & FormatPercent(FC / MCS, True, True)

                 

                S.I = "┣CPU 名称:" & Trim(.Name)

                S.I = "┇CPU 架构:" & .Description

                S.I = "┇制造厂商:" & .Manufacturer

                S.I = "┇插口规格:" & .SocketDesignation

                S.I = "┇CPU 数量:" & .CpuStatus & "   " & String(.CpuStatus, "※")

                S.I = "┇核心数量:" & .NumberOfCores & " " & String(.NumberOfCores, "∷")

                S.I = "┇线程数量:" & .NumberOfLogicalProcessors & " " & String(.NumberOfLogicalProcessors, "≈")

                S.I = "┇地址位宽:" & .AddressWidth & " Bit"

                S.I = "┇数据位宽:" & .DataWidth  & " Bit"

                S.I = "┇CPU 电压:" & .CurrentVoltage / 10 & "V"

                S.I = "┇外部频率:" & .ExtClock & " MHz"

                S.I = "┇当前频率:" & OC        & " MHz, " & OCLC

                S.I = "┇原始频率:" & MCS       & " MHz"

                S.I = "┇CPU占用%:" & .LoadPercentage & "%"

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━┉"

        CPU = S

    End Function

    Function CacheMemory()

        On Error Resume Next

        S.I = "☆[缓存内存]"

        S.I = "┏━━━━━━━━━━━━━┉"

        For Each TempObj In WMI.InstancesOf("Win32_CacheMemory")

            With TempObj

                If .MaxCacheSize > 0 Then

                    Select Case .Purpose

                        Case "L1 Cache" AddStr = "(+DataBit)"

                        Case Else

                    End Select

                    S.I = "┇作用位:" & .Purpose & " ID:" & .DeviceID & ":" & .MaxCacheSize & "KB" & AddStr

                    AddStr = ""

                End If

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━┉"

        CacheMemory = S

    End Function

    Function Memory()

        On Error Resume Next

        TempArr = Split("Unknown Other DRAM Synchronous-DRAM Cache-DRAM EDO EDRAM VRAM SRAM RAM ROM Flash EEPROM FEPROM EPROM CDRAM 3DRAM SDRAM SGRAM RDRAM DDR DDR-2")

        S.I = "☆[内存]"

        S.I = "┏━━━━━━━━━━━━━┉"

        For Each TempObj In WMI.InstancesOf("Win32_PhysicalMemory")

            With TempObj

                S.I = "┣名称/标签:" & .Name & "//www.submisscin.com/wap/" & .Caption

                S.I = "┇BL    :" & .BankLabel

                S.I = "┇槽    :" & .DeviceLocator

                S.I = "┇容量   :" & .Capacity / 1048576 & "MB"

                S.I = "┇类型   :" & TempArr(.MemoryType)

                S.I = "┇速率   :" & .Speed & "MHz"

                S.I = "┇制造商  :" & .Manufacturer

                S.I = "┇热插拔  :" & IIf(.HotSwappable = True, True, False)

                S.I = "┇总位宽  :" & .TotalWidth

                S.I = "┇数据位宽 :" & .DataWidth

                S.I = "┇部分序号 :" & .PartNumber

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━┉"

        Memory = S

    End Function

    Function Video()

        On Error Resume Next

        TempArr1 = Split(" 其他 未知 CGA EGA VGA SVGA MDA HGC MCGA 8514A XGA Linear Frame Buffer" & Space(160 - 14) & "PC-98")

        TempArr2 = Split(" 其他 未知 隔行 逐行")

        S.I = "☆[显卡]"

        S.I = "┏━━━━━━━━━━━━━┉"

        For Each TempObj In WMI.InstancesOf("Win32_VideoController")

            With TempObj

                S.I = "┣接口   :" & TempArr1(.VideoArchitecture)

                S.I = "┇名称   :" & .Name

                S.I = "┇标签   :" & .Caption

                S.I = "┇ID    :" & .DeviceID

                S.I = "┇GPU   :" & .VideoProcessor

                S.I = "┇制造商  :" & .AdapterCompatibility

                S.I = "┇物理显存 :" & .AdapterRAM / 1048576 & "MB"

                S.I = "┇扫描模式 :" & IIf(.CurrentScanMode = False, False, TempArr2(.CurrentScanMode))

                S.I = "┇分辨率  :" & .CurrentHorizontalResolution & " x " & .CurrentVerticalResolution

                S.I = "┇色位盘  :" & .CurrentBitsPerPixel & "Bit"

                S.I = "┇刷新率  :" & .CurrentRefreshRate & "Hz" & "(" & .MinRefreshRate & "-" & .MaxRefreshRate& ")"

                S.I = "┇驱动版本 :" & .DriverVersion

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━┉"

        Video = S

    End Function

    Function Disk()

        On Error Resume Next

        S.I = "☆[硬盘]"

        For Each TempObj In WMI.InstancesOf("Win32_DiskDrive")

            With TempObj

                S.I = "┏[磁盘:" & .Index & "]━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┉"

                S.I = "┇名称  :" & .Name

                S.I = "┇标签  :" & .Caption

                S.I = "┇接口  :" & .InterfaceType

                S.I = "┇制造商 :" & .Manufacturer

                S.I = "┇序号  :" & .SerialNumber

                S.I = "┇介质描述:" & .Description & "   " & "┇介质类型:" & .MediaType

                S.I = "┇柱面数 :" & .TotalCylinders & "    " & "┇磁头数 :" & .TotalHeads

                S.I = "┇标准容量:" & FormatNumber(.Size / 1000000000, 2, True) & "GB" & "   " & "┇实际容量:" & FormatNumber(.Size / 1073741824, 2, True) & "GB"

                S.I = "┇分区数量:" & .Partitions

                S.I = "┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┉"

                S.I = "┣[分区]┳━━━┳━━━━━━━┳━━━━━━━━━━━┳━━━━━┉"

                S.I = "┇ 索引 ┇主分区┇容量(GB) ┇块(大小x数量)       ┇属性"

                S.I = "┣━━━╋━━━╋━━━━━━━╋━━━━━━━━━━━╋━━━━━┉"

                For Each TempObj0 In WMI.InstancesOf("Win32_DiskPartition")

                    If .Index = TempObj0.DiskIndex Then

                        S.I = "┇ " & TempObj0.Index & _

                        "   ┇" & TempObj0.PrimaryPartition & _

                        "   ┇" & FormatNumber(TempObj0.Size / 1073741824, 2, True) & "GB" & _

                        "   ┇" & TempObj0.BlockSize & "x" & TempObj0.NumberOfBlocks & _

                        "   ┇" & _

                        TIf(TempObj0.BootPartition, "引导,") & _

                        TIf(TempObj0.HiddenSectors, "隐藏,") & _

                        TIf(TempObj0.Bootable, "启动.")

                    End If

                Next

                S.I = "┣━━━┻━━━┻━━━━━━━┻━━━━━━━━━━━┻━━━━━┉"

                S.I = "┣[扇区]━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┉"

                S.I = "┇磁道扇区:" & .SectorsPerTrack

                S.I = "┇扇区大小:" & .BytesPerSector

                S.I = "┇总扇区数:" & .TotalSectors

                S.I = "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┉"

            End With

        Next

        TempArr = Split("未知 可移动磁盘 本地磁盘 网络驱动器 光盘 RAM磁盘   ")

        S.I = "┏[分区信息]━━━━━━━━━━━━━━━━━━━━━━━━━━━━┉"

        For Each TempObj1 In CreateObject("Scripting.FileSystemObject").Drives

            With TempObj1

                If .IsReady Then

                    PTS = Int(.FreeSpace / .TotalSize * 100)

                    S.I = "┇盘符:" & .DriveLetter & " 文件系统:" & .FileSystem & "    类型:" & TempArr(.DriveType) & "  卷标:" & .VolumeName

                    S.I = "┇" & "   空闲率:" & PTS & "%    " & String((100 - PTS) / 5, "■") & String(PTS / 5, "□")

                Else

                    S.I = "┇盘符:" & .DriveLetter & " 磁盘未准备好!"

                    S.I = "┇" & "   空闲率:0%  " & "≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡"

                End If

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┉"

        Disk = S

    End Function

    Function Sound()

        On Error Resume Next

        S.I = "☆[声卡]"

        S.I = "┏━━━━━━━━━━━━━┉"

        For Each TempObj In WMI.InstancesOf("Win32_SoundDevice")

            With TempObj

                S.I = "┣名称/标签:" & .Name & "//www.submisscin.com/wap/" & .Caption

                S.I = "┇ID    :" & .DeviceID

                S.I = "┇制造商  :" & .Manufacturer

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━┉"

        Sound = S

    End Function

    Function NetWork()

        On Error Resume Next

        S.I = "☆[网卡]"

        S.I = "┏━━━━━━━━━━━━━┉"

        For Each TempObj In WMI.ExecQuery("Select * from Win32_NetworkAdapter Where PhysicalAdapter = 'True'")

            With TempObj

                S.I = "┣[网卡:" & Space(3 - Len(.Index)) & .Index & "]━━━━━━━━┉"

                S.I = "┇标签 :" & .Caption

                S.I = "┇PNPDID:" & .PNPDeviceID

                S.I = "┇制造商:" & .Manufacturer

                S.I = "┇速率 :" & IIf(TypeName(.Speed) = "Null", False, .Speed / 10000 & "bps")

                S.I = "┇启用 :" & .NetEnabled

                S.I = "┇服务名:" & .ServiceName

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━┉"

        NetWork = S

    End Function

    Function Battery()

        On Error Resume Next

        TempArr1 = Split(" 放电 交流电 充满 低 临界 充电 充电>高 充电>低 充电>临界 未定义 部分充电")

        TempArr2 = Split(" 其他 未知 铅酸 镉镍 镍金属氢化物 锂离子 锌空气 锂聚合物")

        S.I = "☆[内部电池]"

        S.I = "┏━━━━━━━━━━━━━┉"

        For Each TempObj In WMI.InstancesOf("Win32_Battery")

            With TempObj

                S.I = "┣名称/标签:" & .Name & "//www.submisscin.com/wap/" & .Caption

                S.I = "┇ID    :" & .DeviceID

                S.I = "┇PNPDID  :" & .PNPDeviceID

                S.I = "┇充电时间 :" & .BatteryRechargeTime

                S.I = "┇状态   :" & TempArr1(.BatteryStatus)

                S.I = "┇材料   :" & TempArr2(.Chemistry)

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━┉"

        Battery = S

    End Function

    Function PortableBattery()

        On Error Resume Next

        TempArr1 = Split(" 其他 未知 充满 低 临界 充电 充电>高 充电>低 充电>临界 未定义 部分充电")

        TempArr2 = Split(" 其他 未知 铅酸 镉镍 镍金属氢化物 锂离子 锌空气 锂聚合物")

        S.I = "☆[便携电池]"

        S.I = "┏━━━━━━━━━━━━━┉"

        For Each TempObj In WMI.InstancesOf("Win32_PortableBattery")

            With TempObj

                S.I = "┣名称/标签:" & .Name & "//www.submisscin.com/wap/" & .Caption

                S.I = "┇ID    :" & .DeviceID

                S.I = "┇PNPDID  :" & .PNPDeviceID

                S.I = "┇制造商  :" & .Manufacturer

                S.I = "┇预计剩余 :" & .EstimatedChargeRemaining

                S.I = "┇预计时间 :" & .EstimatedRunTime

                S.I = "┇电源管理 :" & .PowerManagementSupported

                S.I = "┇位置   :" & .Location

                S.I = "┇智能电池 :" & .SmartBatteryVersion

                S.I = "┇材料   :" & TempArr2(.Chemistry)

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━┉"

        PortableBattery = S

    End Function

    Function USB()

        On Error Resume Next

        S.I = "☆[USB坞]"

        S.I = "┏━━━━━━━━━━━━━┉"

        For Each TempObj In WMI.InstancesOf("Win32_USBController")

            With TempObj

                S.I = "┣标签 :" & .Caption

                S.I = "┇ID  :" & .DeviceID

                S.I = "┇PNPDID:" & .PNPDeviceID

                S.I = "┇制造商:" & .Manufacturer

            End With

        Next

        S.I = "┗━━━━━━━━━━━━━┉"

        USB = S

    End Function

End Class

'----

    '输出

    Sub Print(ByVal Texts)

        WScript.StdOut.Write Texts

    End Sub

    Sub Echo(ByVal GEOM_TempData)

        WScript.Echo GEOM_TempData

    End Sub

    '输出:覆盖行,空白长度

    Sub PrintC(ByVal Texts, ByVal LenNum)

        WScript.StdOut.Write Chr(13) & Texts & String(LenNum, " ")

    End Sub

    '输出,+换行

    Sub PrintL(ByVal Texts)

        WScript.StdOut.WriteLine(Texts)

    End Sub

    '输入

    Function InPut()

        InPut = WScript.StdIn.ReadLine

    End Function

Function IIf(ByVal GEOM_tf, ByVal GEOM_T, ByVal GEOM_F)

    If GEOM_tf = True Then IIF = GEOM_T Else IIF = GEOM_F

End Function

'iif真

Function TIf(ByVal GEOM_tf, ByVal GEOM_T)

    If GEOM_tf = True Then TIF = GEOM_T

End Function

'iif假

Function FIf(ByVal GEOM_tf, ByVal GEOM_F)

    If GEOM_tf = False Then FIF = GEOM_F

End Function

推荐信息
Baidu
map