获取Apple Mac系统的唯一机器编号

时间:2017-06-05 09:59:18

标签: macos excel-vba vba excel

我分发许可软件,并且有一个非常好的VBA方法来注册和识别注册的PC是唯一的。我使用主板ID +处理器ID + HD ID的组合(用于ID读取序列号)。到目前为止,在注册了1000多台设备之后,我还没有看到重复。

现在我需要将此VBA功能扩展到Apple Mac OSx环境。任何人都可以帮助我使用VBA代码从MAC机器上获取“数字”。显然PC代码不起作用。

1 个答案:

答案 0 :(得分:0)

您可以使用此功能尝试机器序列号。它可以在 Mac 或 PC 上运行

Function GetPCSerialNumber()
'   V1.1
#If Mac Then
    Dim PCSerialNumber, StrOffset
    PCSerialNumber = MacScript("do shell script ""ioreg -l | grep IOPlatformSerialNumber""")
    StrOffset = InStr(PCSerialNumber, " = """)
    PCSerialNumber = Mid(PCSerialNumber, StrOffset + 4, 999)
    GetPCSerialNumber = "{Mac}" & Left(PCSerialNumber, Len(PCSerialNumber) - 1)
#Else
'   wmic bios get * /format:list
    Dim objWMIService As Object
    Dim colItems As Variant
    Dim objItem
    Dim strMsg As String

    Set objWMIService = GetObject("winmgmts://./root/cimv2")

    Set colItems = objWMIService.ExecQuery("Select * from Win32_BIOS where PrimaryBIOS = true", , 48)

    For Each objItem In colItems
        strMsg = objItem.SerialNumber
    Next

    GetPCSerialNumber = strMsg
#End If

您还可以使用 Excel 自己的函数 [在 VBA 中] ENVIRON() 来获取 [PC] 环境变量的值,例如ENVIRON("USERNAME") 或 ENVIRON("COMPUTERNAME"),您可以通过创建另一个函数 GETENVIRON() 在 Excel 中访问它:

Function GetEnviron(ByVal EnvironmentVariableName As String)
'   V1.1
    GetEnviron = Environ(EnvironmentVariableName)
End Function

请注意,在 Mac 上,相当于 PC 的 USERNAME 环境变量是 USER 或 LOGNAME。

在 Mac 上使用的环境变量要少得多(在终端窗口中尝试 ENV 以查看)