這篇文章主要介紹了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 & "/" & .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 & "/" & .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 & "/" & .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 & "/" & .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
運行效果:
新聞熱點
疑難解答