首頁 > 科技

VBA 如何獲取計算機硬體資訊,一定要知道的技巧

2021-07-31 06:48:54

計算機資訊是一個固定的內容,程式設計過程中會經常提取計算機資訊來進行處理,本節介紹一下如何利用VBA來進行提取計算機資訊。

本示例基於Windows作業系統,蘋果或Linux系統並不適用,一定分清楚。

下圖為提取後的表格,簡單舉例三個資訊,分別是CPU序列號,硬碟資訊和網卡MAC地址。

根據新建一個GetObject("Winmgmts:")物件來對作業系統進行資訊提取。

它是基於windows系統的系統管理工具WMI。

什麼是WMI 呢?

全稱為Windows管理規範,英文(Windows Management Instrumentation)

它是一項核心的 Windows 管理技術,使用者可以使用 WMI 管理本地和遠端計算機。

總之就是用來管理計算機的一個工具,既然是管理計算機的,那它對計算機有十足的瞭解,所以我們要通過WMI來獲取計算機資訊就找對了。

下面來看具體程式碼,一定要收藏。

獲取CPU序列號函數:

Public Function GetCpu()

'CPU序列號

Dim cpuInfo, Soi, So, s As Integer, cpuArr()

cpuInfo = ""

Set Soi = GetObject("Winmgmts:").InstancesOf("Win32_Processor")

For Each So In Soi

cpuInfo = CStr(So.ProcessorId)

ReDim Preserve cpuArr(s)

cpuArr(s) = cpuInfo

s = s + 1

Next

If Not VBA.IsArray(cpuArr) Then

ReDim cpuArr(0)

cpuArr(0) = ""

End If

GetCpu = cpuArr

End Function

獲取硬碟資訊函數

Function getHde() As String

'硬碟資訊

Dim HDid, moc, mo

Set moc = GetObject("Winmgmts:").InstancesOf("Win32_DiskDrive")

For Each mo In moc

HDid = HDid & mo.Model & VBA.vbCrLf

Next

getHde = VBA.Mid(HDid, 1, VBA.Len(HDid) - 1)

End Function

獲取網卡MAC地址函數:

Function getMAC() As String

'網卡地址

Dim Wap, MAC

Set Wap = GetObject("Winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration")

For Each MAC In Wap

If MAC.IPEnabled = True Then

getMAC = MAC.MacAddress

Exit For

End If

Next

End Function

以上函數都可以獨立呼叫,呼叫方法如下:

Private Sub CommandButton1_Click()

Dim r As Range

Set r = Range("D2")

With r

.Value = GetCpu

.Offset(1, 0).Value = getHde

.Offset(2, 0).Value = getMAC

End With

End Sub

重點說一點,如果使用的時候沒有返回任何正確資訊,或者有報錯提示,那麼有兩個可能。

一是計算機系統版本不同,由於不同時期的作業系統WMI也會有不同,所以找不到硬體資訊。

二是WMI 服務最好啟動,服務名為「winmgmt」。啟動方法 DOS環境下 執行 net start winmgmt 命令重啟。停止 WMI 服務使用:winmgmt /kill 或 net stop winmgmt ,最好不要停止服務。

如果想獲取更多計算機資訊可參考WMI物件使用方法,不過似乎就脫離了Excel VBA內容了。

歡迎關注、收藏

END


IT145.com E-mail:sddin#qq.com