【问题标题】:Pulling Hardware Serial Number via Visual Basic?通过 Visual Basic 提取硬件序列号?
【发布时间】:2014-02-01 20:42:26
【问题描述】:

我正在用 Visual Basic 编写一个应用程序,它会提取有关计算机的基本信息并将数据输出到表单上。目前,我正在尝试提取我将使用的机器的序列号。例如,从 BIOS 中提取笔记本电脑的序列号。我浏览了互联网,并没有真正找到如何在不使用 WMI 或 C 的情况下在 Visual Basic 中执行此操作。有没有办法在 Visual Basic 中执行此操作?

以下是我目前的表格,因此您可以了解我正在尝试做什么:

        TextBoxComputerName.Text = Environment.MachineName
        TextBoxOSVersion.Text = System.Environment.OSVersion.ToString
        TextBoxOSFullName.Text = My.Computer.Info.OSFullName
        TextBoxCurrentUser.Text = System.Environment.UserName
        TextBox64Bit.Text = System.Environment.Is64BitOperatingSystem
        TextBoxSystemDirectory.Text = System.Environment.SystemDirectory
        TextBoxDomain.Text = System.Environment.UserDomainName
        ' CHECK SERIAL NUMBER HERE.

非常感谢大家!

【问题讨论】:

  • 有什么理由不使用 WMI 获取此类信息?
  • 您将需要使用 WMI,使用 Microsoft 的 WMI Code Creator 进行探索。
  • WMI 不需要在您使用它的机器上安装 WMI 库吗?如果是这种情况,那么我不能真正将其用作解决方案,因为我需要在多台机器上使用此应用程序。
  • 您只需要包含System.Management 命名空间。 WMI 内置在 Windows 中。
  • 没有一个答案适用于 VB.NET、VBA 和 VB6,它们彼此非常不同

标签: vb.net visual-studio-2010 vba vb6 hardware


【解决方案1】:

这对您非常有用!首先添加对 System.Management 的引用,然后确保将它也导入到类的顶部。我在表单加载事件中这样做了,但你可以把它放在任何地方......

  Imports System.Management

  Dim q As New SelectQuery("Win32_bios")
  Dim search As New ManagementObjectSearcher(q)
  Dim info As New ManagementObject

  For Each info In search.Get
    MessageBox.Show("Serial Number: " & info("serialnumber").ToString & vbNewLine & vbNewLine & "Bios Version: " & info("version").ToString)
  Next

如果您愿意,可以先声明一个字符串,然后将其设置为:info("serialnumber").ToString 并将其设置为您的 txtSerial.Text = 您声明的字符串

这是我得到的......

【讨论】:

  • 感谢您,我很高兴看到它对您有用。但是,我使用的是 Visual Studio,当我输入该代码时,我得到了所有类型的错误。其中之一是“Imports System.Management”,它给了我错误“未定义类型'ManagementObject'。”。
  • 您添加参考了吗?您必须这样做,而不仅仅是导入。这是我的答案。
  • 好的,我添加了 System.Management 的参考,它删除了所有错误,除了一个错误,它说“导入 System.Management”是一个语法错误。当然,我使用的是 VB(VBA) 而不是 VB.NET(如果有区别的话)。非常感谢!
  • 您标记了 VB.NET 。 . .如果这对您有帮助,请不要忘记接受。
  • 没有人提到它,但您不仅需要添加对“System.Management”的引用,还需要添加对“System.Management.Instrumentation”的引用
【解决方案2】:

这是 VBScript,但应该可以粘贴到 VB6 中。

您知道这个字段在许多计算机上都是空白的吗?

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colItems = objWMIService.ExecQuery("Select * From Win32_BIOS")

For Each objItem in colItems
    msgbox objItem.SerialNumber
Next

从命令提示符(但我认为家庭版不会获得控制台程序 wmic)

wmic bios get /format:list

wmic bios get serialnumber /format:list

【讨论】:

    【解决方案3】:

    尝试使用 Treek 的许可库。它具有生成硬件序列的类。

    http://msdn.treekslicensinglibrary.com/html/f2bfa10c-d5d9-25ac-39c2-46e2393c0fbe.htm

    【讨论】:

      【解决方案4】:

      我找到了一种在 VBA 中使用FileSystemObject 稍微倒退一点的方法。您需要设置对 Windows 脚本运行时的引用。

      Option Explicit
      
      Public Sub GetHDSerial()
      
          Dim objFSO          As FileSystemObject
          Dim objFolder       As Folder
      
          Dim strComputer     As String
      
          strComputer = "myComputer"
          Set objFSO = New FileSystemObject
          Set objFolder = objFSO.GetFolder("\\" & strComputer & "\c$")
          Debug.Print Hex(objFolder.Drive.SerialNumber)
      
          Set objFSO = Nothing
          Set objFolder = Nothing
      
      End Sub
      

      这不包括多个物理驱动器,这在我的环境中不是问题。

      【讨论】:

      • 我如何在 ms excel 中使用后期绑定来实现这一点?
      【解决方案5】:

      这是一个将返回的类: *) 计算机名称 *) 程序集名称 *) 登录用户名 *) 序列号

      导入 System.Management

      ''' ''' 提供方法和属性以检索并提供给 ''' 应用: ''' *) 计算机名称 ''' *) 程序集名称 ''' *) 登录用户名 ''' *) 电脑序列号 '''
      ''' 公共类 clsGetComputerInformation Private ReadOnly mstrClsTitle As String = "clsGetComputerInformation"

      Public ReadOnly Property pstrComputerName() As String
          Get
              Return Environment.MachineName
          End Get
      End Property
      
      Public ReadOnly Property pstrUserName() As String
          Get
              Return System.Security.Principal.WindowsIdentity.GetCurrent.Name
          End Get
      End Property
      
      Public ReadOnly Property pstrAssemblyName() As String
          Get
              Return My.Application.Info.AssemblyName
          End Get
      End Property
      
      
      Public Function pstrSystemSerialNumber() As String
          Dim query As New SelectQuery("Win32_bios")
          Dim search As New ManagementObjectSearcher(query)
          Dim info As ManagementObject
          Dim lstrSerialNo As String = ""
      
          For Each info In search.Get()
              lstrSerialNo = info("SerialNumber").ToString()
          Next
          Return lstrSerialNo
      End Function
      

      结束类

      【讨论】:

        猜你喜欢
        • 2013-05-02
        • 2010-10-17
        • 1970-01-01
        • 2020-01-27
        • 2020-07-15
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        相关资源
        最近更新 更多