vba編程中,有時候需要獲取計算機系統信息,比如計算機名稱、ID、磁盤容量、磁盤類型等等,那么如何來實現這個功能呢?
下面講一下,關于獲取本地信息的一個簡單方法。
這里我們會用到一些很重要的函數(GetObject),這些函數內置在Excel應用中,只要調用即可。
其中還用到Win32_LogicalDisk class,也就是WMI下的一個類。
相關內容可以查看如下網址:
https://docs.microsoft.com/zh-cn/windows/win32/cimwin32prov/win32-logicaldisk?redirectedfrom=MSDN
本節內容相對比較難,需要掌握的知識有一些深度,其代碼可能不是十分好理解。
如果只是拿來用一下,直接用就可以,如果要更多地掌握其核心內容,可能要花費不少時間,而且還必須對操作系統有一個十分熟悉的認識。
特別是對于系統底層的一些磁盤結構有了解,還有就是要對注冊表相關構造也有認識,再來學習本節內容就相對容易多了。
上圖為一個例子,單擊按鈕自動查找出計算機的ID號來,ID號是每個計算機的身份識別,具有唯一性,就像個人身份證一樣。
還有一個功能就是列出本地硬盤的存儲信息,也就是存儲空間大小。
實現這個功能首先是對注冊表進行了一翻查找,找到相關信息后再和計算機屬性對比了一下。
然后利用GetObject函數調出對應數據,顯示到表格內。
其過程有點麻煩,實現最終結果卻毫無波瀾。
下面介紹一下代碼
將獲取計算機ID功能,做成一個函數來實現,只要打開Excel調用這個函數就可將ID顯示在表格里。
做得還是比較實用的,如果需要直接拿去調用即可。
Sub getSystemID() '''取計算機ID
Dim idObj, id,inobj
Set idObj=GetObject("winmgmts:{impersonationLevel=impersonate}") _
.InstancesOf("Win32_OperatingSystem")
For Each inobj In idObj
If inobj.SerialNumber <> "" Then 'SerialNumber 計算ID號
id=inobj.SerialNumber
End If
Next
ThisWorkbook.ActiveSheet.Range("B2").Value=id
End Sub
getobject()將返回win32_operatingsystem下一些相關信息,里面包含了計算機內置信息,有計算機名、系統版本號、ID等等各種你想要的。
詳細可查閱下圖
相對來說完成這個功能是有一些難度的,畢竟要掌握的知識點比較多,交叉內容也相對復雜,所以做了一些很全面的思考。
編碼過程中還有許多函數處理,就不一一貼出來了。
把最重要的部分,如何獲取硬盤信息函數分享出來。
Sub DiskSizes() '列出硬盤信息
Dim Disks, Sizes()
ReDim Sizes(0)
Set Disks=GetObject("winmgmts:{impersonationLevel=impersonate}") _
.InstancesOf("Win32_LogicalDisk")
For Each mo In Disks
If mo.Size <> "" Then
ReDim Preserve Sizes(UBound(Sizes) + 1)
Sizes(UBound(Sizes))=mo.Name & "_" & mo.Size
End If
Next
'''''''''''''''''''''''''''''' 保存至表格
ActiveSheet.Range("A2").Select
Dim i As Integer
For i=1 To UBound(Sizes)
With Selection.Offset(i, 0)
.Value=VBA.Left(Sizes(i), 2)
.Interior.Color=RGB(211, 211, 1)
.Borders.LineStyle=1
.RowHeight=30
.VerticalAlignment=xlCenter
.HorizontalAlignment=xlCenter
End With
With Selection.Offset(i, 1)
.Formula=VBA.Replace(Sizes(i), VBA.Left(Sizes(i), 2) & "_", "", 1)
.Interior.Color=RGB(211, 211, 1)
.Borders.LineStyle=1
.RowHeight=30
.NumberFormatLocal="0"
.VerticalAlignment=xlCenter
.HorizontalAlignment=xlRight
.IndentLevel=2 '縮進
End With
Next i
End Sub
功能雖簡單,但并不是說就很容易掌握,建議不是十分了解操作系統還是不要學習這個了,除沒有意義之外,再者就是學會了也不知道用來做什么。
但做為一個對系統有特別熱愛的人來說,就必須要掌握了,不過相對了解操作系統的人來說還是很容易的,那些你所知道或不知道的東西就是在那里,只要你去發現,它也沒不會亂跑,妥妥地拿出來。
對于靠近系統部分本不是vba的強項,所以我們要用到WMI技術,這就偏離了vba編程的常規路徑。
在Win8.1/Win10中,磁盤檢查詳細信息并不像Win7及以前系統那樣在過程中直接給出,這使得某些專業用戶很難直接了解檢查結果。微軟這樣安排可能和更新日志詳細內容不面向普通用戶開放一樣,為大多數用戶“減輕負擔”。不過,如果你的確需要查看這些日志,可以到“事件查看器”中進行搜尋,而且并不麻煩。
具體方法如下:
1、在Cortana搜索欄輸入“事件查看器”后回車,或者在開始按鈕點右鍵,選擇“事件查看器”
2、在左邊欄展開“Windows日志”,選擇“應用程序”,從右邊欄選擇“篩選當前日志”,如下圖——
3、在窗口正中間一行輸入事件ID“26226”,點擊“確定”,如下圖——
4、在“事件查看器”主窗口中間就可以看到目前已有的日志。單擊所需日志,下方就會給出該日志信息,此時點擊“詳細信息”可查看日志內容。
注意:上述“事件ID”序號只適用于Win8.1/Windows10,Windows7用戶若想查看,需輸入“1001”。
微信搜索“IT之家”關注搶6s大禮!下載IT之家客戶端(戳這里)也可參與評論抽樓層大獎!