Question

I am writing an application in Visual Basic that pulls basic information about the computer and outputs the data onto a form. Currently, I am trying to pull the serial number for the machine I would be using. For example, pulling a serial number of a laptop from the BIOS. I have looked around the internet and haven't really found how to do this in Visual Basic without using WMI or C. Is there a way to do this in Visual Basic?

Below is what I have currently in the form, so you can get an idea of what I am trying to do:

        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.

Thank you all so much!

Was it helpful?

Solution

This will work for you just great! First add reference to System.Management and then make sure to import it at the top of your class as well. I did this on a form load event, but you can put it anywhere...

  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

You can declare a string first if you would like and then set it to: info("serialnumber").ToString and the set that to you txtSerial.Text = your declared string

Here is what I get...

My outcome

OTHER TIPS

This is VBScript but should be pastable into VB6.

You do know this field is blank on many computers?

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

From a command prompt (but I don't think home editions get the console program wmic)

wmic bios get /format:list

or

wmic bios get serialnumber /format:list

Try to use Treek's Licecnsing Library. It has class for generating hardware serial.

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

I found a way to get to this a bit backwards in VBA, using the FileSystemObject. You will need to set a reference to the Windows Scripting Runtime.

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

This does not account for multiple physical drives, which wasn't a problem in my environment.

Here is a class that will return: *) Computer Name *) Assembly Name *) Login User Name *) Serial No

Imports System.Management

''' ''' Provides the Methods and Properties to retrieve and make available to the ''' Application the: ''' *) Computer Name ''' *) Assembly Name ''' *) Login User Name ''' *) PC Serial Number '''
''' Public Class 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

End Class

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top