vba编程中,有时候需要获取计算机系统信息,比如计算机名称、ID、磁盘容量、磁盘类型等等,那么如何来实现这个功能呢?
下面讲一下,关于获取本地信息的一个简单方法。
这里我们会用到一些很重要的函数(GetObject),这些函数内置在Excel应用中,只要调用即可。
其中还用到Win32_LogicalDisk class,也就是WMI下的一个类。
相关内容可以查看如下网址:
NO.2https://docs.microsoft.com/zh-cn/windows/win32/cimwin32prov/win32-logicaldisk?redirectedfrom=MSDN
本节内容相对比较难,需要掌握的知识有一些深度,其代码可能不是十分好理解。
如果只是拿来用一下,直接用就可以,如果要更多地掌握其核心内容,可能要花费不少时间,而且还必须对操作系统有一个十分熟悉的认识。
特别是对于系统底层的一些磁盘结构有了解,还有就是要对注册表相关构造也有认识,再来学习本节内容就相对容易多了。
NO.3上图为一个例子,单击按钮自动查找出计算机的ID号来,ID号是每个计算机的身份识别,具有唯一性,就像个人身份证一样。
还有一个功能就是列出本地硬盘的存储信息,也就是存储空间大小。
实现这个功能首先是对注册表进行了一翻查找,找到相关信息后再和计算机属性对比了一下。
然后利用GetObject函数调出对应数据,显示到表格内。
其过程有点麻烦,实现最终结果却毫无波澜。
NO.4下面介绍一下代码
将获取计算机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等等各种你想要的。
详细可查阅下图
NO.5相对来说完成这个功能是有一些难度的,毕竟要掌握的知识点比较多,交叉内容也相对复杂,所以做了一些很全面的思考。
编码过程中还有许多函数处理,就不一一贴出来了。
把最重要的部分,如何获取硬盘信息函数分享出来。
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编程的常规路径。