VBS腳本寫(xiě)的Windows硬件檢測(cè)工具分享

字號(hào):


    這篇文章主要介紹了VBS腳本寫(xiě)的Windows硬件檢測(cè)工具分享,本文直接給出腳本源碼和運(yùn)行效果圖,需要的朋友可以參考下
    Const MyName = "Windows硬件檢視工具(測(cè)試版) --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 "[設(shè)備列表]"
        Echo " 常用組 A: 1.OS  2.CPU   3.主板    4.內(nèi)存    5.顯卡    6.硬盤(pán)"
        Echo " 次級(jí)組 B: 7.USB 8.緩存    9.網(wǎng)卡"
        Echo " 醬油組 C: 10.BIOS   11.聲卡   電池(12.內(nèi)部 13.便攜)"
        Echo "[測(cè)試CPU]"
        Echo " 測(cè)試組 D: 14.變量?jī)绱畏竭\(yùn)算    15.字符疊合 16.加法計(jì)算 17.疊加計(jì)算"
    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 = "變量?jī)绱畏竭\(yùn)算 " & DPS & "萬(wàn)次用時(shí):" & RT("TestVar = I ^ 2", DPS * 10000)
        End Function
        Function S2()
            S2 = "字符疊合 " & DPS & "000次用時(shí):" & RT("TestVar = TestVar & vbTab", DPS * 1000)
        End Function
        Function S3()
            S3 = "加法計(jì)算 " & DPS & "萬(wàn)次用時(shí):" & RT("TestVar = 86 + 32", DPS * 10000)
        End Function
        Function S4()
            S4 = "疊加計(jì)算 " & DPS & "萬(wàn)次用時(shí):" & 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 = "┇狀態(tài)      :" & .Status
                End With
            Next
            S.I = "┗━━━━━━━━━━━━━┉"
            BIOS = S
        End Function
        Function OS()
            On Error Resume Next
            S.I = "☆[操作系統(tǒng)]"
            S.I = "┏━━━━━━━━━━━━━┉"
            For Each TempObj in WMI.InstancesOf("Win32_OperatingSystem")
                With TempObj
                    S.I = "┣標(biāo)簽  :" & .Caption
                    S.I = "┇CSDV  :" & .CSDVersion
                    S.I = "┇版本  :" & .Version
                    S.I = "┇RAM識(shí)別:" & .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 = "┣標(biāo)簽:" & .Caption
                    S.I = "┇編號(hào):" & .Product
                    S.I = "┇序號(hào):" & .SerialNumber 
                    S.I = "┇名稱(chēng):" & .Name
                    S.I = "┇版本:" & .Version
                    S.I = "┇廠商:" & .Manufacturer
                    S.I = "┇狀態(tà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 名稱(chēng):" & Trim(.Name)
                    S.I = "┇CPU 架構(gòu):" & .Description
                    S.I = "┇制造廠商:" & .Manufacturer
                    S.I = "┇插口規(guī)格:" & .SocketDesignation
                    S.I = "┇CPU 數(shù)量:" & .CpuStatus & "   " & String(.CpuStatus, "※")
                    S.I = "┇核心數(shù)量:" & .NumberOfCores & " " & String(.NumberOfCores, "∷")
                    S.I = "┇線(xiàn)程數(shù)量:" & .NumberOfLogicalProcessors & " " & String(.NumberOfLogicalProcessors, "≈")
                    S.I = "┇地址位寬:" & .AddressWidth & " Bit"
                    S.I = "┇數(shù)據(jù)位寬:" & .DataWidth  & " Bit"
                    S.I = "┇CPU 電壓:" & .CurrentVoltage / 10 & "V"
                    S.I = "┇外部頻率:" & .ExtClock & " MHz"
                    S.I = "┇當(dāng)前頻率:" & 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 = "☆[緩存內(nè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 = "☆[內(nèi)存]"
            S.I = "┏━━━━━━━━━━━━━┉"
            For Each TempObj In WMI.InstancesOf("Win32_PhysicalMemory")
                With TempObj
                    S.I = "┣名稱(chēng)/標(biāo)簽:" & .Name & "/" & .Caption
                    S.I = "┇BL    :" & .BankLabel
                    S.I = "┇槽    :" & .DeviceLocator
                    S.I = "┇容量   :" & .Capacity / 1048576 & "MB"
                    S.I = "┇類(lèi)型   :" & TempArr(.MemoryType)
                    S.I = "┇速率   :" & .Speed & "MHz"
                    S.I = "┇制造商  :" & .Manufacturer
                    S.I = "┇熱插拔  :" & IIf(.HotSwappable = True, True, False)
                    S.I = "┇總位寬  :" & .TotalWidth
                    S.I = "┇數(shù)據(jù)位寬 :" & .DataWidth
                    S.I = "┇部分序號(hào) :" & .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 = "┇名稱(chēng)   :" & .Name
                    S.I = "┇標(biāo)簽   :" & .Caption
                    S.I = "┇I(xiàn)D    :" & .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 = "┇色位盤(pán)  :" & .CurrentBitsPerPixel & "Bit"
                    S.I = "┇刷新率  :" & .CurrentRefreshRate & "Hz" & "(" & .MinRefreshRate & "-" & .MaxRefreshRate& ")"
                    S.I = "┇驅(qū)動(dòng)版本 :" & .DriverVersion
                End With
            Next
            S.I = "┗━━━━━━━━━━━━━┉"
            Video = S
        End Function
        Function Disk()
            On Error Resume Next
            S.I = "☆[硬盤(pán)]"
            For Each TempObj In WMI.InstancesOf("Win32_DiskDrive")
                With TempObj
                    S.I = "┏[磁盤(pán):" & .Index & "]━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┉"
                    S.I = "┇名稱(chēng)  :" & .Name
                    S.I = "┇標(biāo)簽  :" & .Caption
                    S.I = "┇接口  :" & .InterfaceType
                    S.I = "┇制造商 :" & .Manufacturer
                    S.I = "┇序號(hào)  :" & .SerialNumber
                    S.I = "┇介質(zhì)描述:" & .Description & "   " & "┇介質(zhì)類(lèi)型:" & .MediaType
                    S.I = "┇柱面數(shù) :" & .TotalCylinders & "    " & "┇磁頭數(shù) :" & .TotalHeads
                    S.I = "┇標(biāo)準(zhǔn)容量:" & FormatNumber(.Size / 1000000000, 2, True) & "GB" & "   " & "┇實(shí)際容量:" & FormatNumber(.Size / 1073741824, 2, True) & "GB"
                    S.I = "┇分區(qū)數(shù)量:" & .Partitions
                    S.I = "┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┉"
                    S.I = "┣[分區(qū)]┳━━━┳━━━━━━━┳━━━━━━━━━━━┳━━━━━┉"
                    S.I = "┇ 索引 ┇主分區(qū)┇容量(GB) ┇塊(大小x數(shù)量)       ┇屬性"
                    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, "引導(dǎo),") & _
                            TIf(TempObj0.HiddenSectors, "隱藏,") & _
                            TIf(TempObj0.Bootable, "啟動(dòng).")
                        End If
                    Next
                    S.I = "┣━━━┻━━━┻━━━━━━━┻━━━━━━━━━━━┻━━━━━┉"
                    S.I = "┣[扇區(qū)]━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┉"
                    S.I = "┇磁道扇區(qū):" & .SectorsPerTrack
                    S.I = "┇扇區(qū)大小:" & .BytesPerSector
                    S.I = "┇總扇區(qū)數(shù):" & .TotalSectors
                    S.I = "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┉"
                End With
            Next
            TempArr = Split("未知 可移動(dòng)磁盤(pán) 本地磁盤(pán) 網(wǎng)絡(luò)驅(qū)動(dòng)器 光盤(pán) RAM磁盤(pán)   ")
            S.I = "┏[分區(qū)信息]━━━━━━━━━━━━━━━━━━━━━━━━━━━━┉"
            For Each TempObj1 In CreateObject("Scripting.FileSystemObject").Drives
                With TempObj1
                    If .IsReady Then
                        PTS = Int(.FreeSpace / .TotalSize * 100)
                        S.I = "┇盤(pán)符:" & .DriveLetter & " 文件系統(tǒng):" & .FileSystem & "    類(lèi)型:" & TempArr(.DriveType) & "  卷標(biāo):" & .VolumeName
                        S.I = "┇" & "   空閑率:" & PTS & "%    " & String((100 - PTS) / 5, "■") & String(PTS / 5, "□")
                    Else
                        S.I = "┇盤(pán)符:" & .DriveLetter & " 磁盤(pán)未準(zhǔn)備好!"
                        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 = "┣名稱(chēng)/標(biāo)簽:" & .Name & "/" & .Caption
                    S.I = "┇I(xiàn)D    :" & .DeviceID
                    S.I = "┇制造商  :" & .Manufacturer
                End With
            Next
            S.I = "┗━━━━━━━━━━━━━┉"
            Sound = S
        End Function
        Function NetWork()
            On Error Resume Next
            S.I = "☆[網(wǎng)卡]"
            S.I = "┏━━━━━━━━━━━━━┉"
            For Each TempObj In WMI.ExecQuery("Select * from Win32_NetworkAdapter Where PhysicalAdapter = 'True'")
                With TempObj
                    S.I = "┣[網(wǎng)卡:" & Space(3 - Len(.Index)) & .Index & "]━━━━━━━━┉"
                    S.I = "┇標(biāo)簽 :" & .Caption
                    S.I = "┇PNPDID:" & .PNPDeviceID
                    S.I = "┇制造商:" & .Manufacturer
                    S.I = "┇速率 :" & IIf(TypeName(.Speed) = "Null", False, .Speed / 10000 & "bps")
                    S.I = "┇啟用 :" & .NetEnabled
                    S.I = "┇服務(wù)名:" & .ServiceName
                End With
            Next
            S.I = "┗━━━━━━━━━━━━━┉"
            NetWork = S
        End Function
        Function Battery()
            On Error Resume Next
            TempArr1 = Split(" 放電 交流電 充滿(mǎn) 低 臨界 充電 充電>高 充電>低 充電>臨界 未定義 部分充電")
            TempArr2 = Split(" 其他 未知 鉛酸 鎘鎳 鎳金屬氫化物 鋰離子 鋅空氣 鋰聚合物")
            S.I = "☆[內(nèi)部電池]"
            S.I = "┏━━━━━━━━━━━━━┉"
            For Each TempObj In WMI.InstancesOf("Win32_Battery")
                With TempObj
                    S.I = "┣名稱(chēng)/標(biāo)簽:" & .Name & "/" & .Caption
                    S.I = "┇I(xiàn)D    :" & .DeviceID
                    S.I = "┇PNPDID  :" & .PNPDeviceID
                    S.I = "┇充電時(shí)間 :" & .BatteryRechargeTime
                    S.I = "┇狀態(tài)   :" & TempArr1(.BatteryStatus)
                    S.I = "┇材料   :" & TempArr2(.Chemistry)
                End With
            Next
            S.I = "┗━━━━━━━━━━━━━┉"
            Battery = S
        End Function
        Function PortableBattery()
            On Error Resume Next
            TempArr1 = Split(" 其他 未知 充滿(mǎn) 低 臨界 充電 充電>高 充電>低 充電>臨界 未定義 部分充電")
            TempArr2 = Split(" 其他 未知 鉛酸 鎘鎳 鎳金屬氫化物 鋰離子 鋅空氣 鋰聚合物")
            S.I = "☆[便攜電池]"
            S.I = "┏━━━━━━━━━━━━━┉"
            For Each TempObj In WMI.InstancesOf("Win32_PortableBattery")
                With TempObj
                    S.I = "┣名稱(chēng)/標(biāo)簽:" & .Name & "/" & .Caption
                    S.I = "┇I(xiàn)D    :" & .DeviceID
                    S.I = "┇PNPDID  :" & .PNPDeviceID
                    S.I = "┇制造商  :" & .Manufacturer
                    S.I = "┇預(yù)計(jì)剩余 :" & .EstimatedChargeRemaining
                    S.I = "┇預(yù)計(jì)時(shí)間 :" & .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 = "┣標(biāo)簽 :" & .Caption
                    S.I = "┇I(xiàn)D  :" & .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
        '輸出:覆蓋行,空白長(zhǎng)度
        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