Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
lblSystemSerialNumbers.Text = SystemSerialNumber()
lblCpuIds.Text = CpuId()
End Sub
Private Function SystemSerialNumber() As String
' Get the Windows Management Instrumentation object.
Dim wmi As Object = GetObject("WinMgmts:")
' Get the "base boards" (mother boards).
Dim serial_numbers As String = ""
Dim mother_boards As Object = wmi.InstancesOf("Win32_BaseBoard")
For Each board As Object In mother_boards
serial_numbers &= ", " & board.SerialNumber
Next board
If serial_numbers.Length > 0 Then serial_numbers = serial_numbers.Substring(2)
Return serial_numbers
End Function
Private Function CpuId() As String
Dim computer As String = "."
Dim wmi As Object = GetObject("winmgmts:" & _
"{impersonationLevel=impersonate}!\\" & _
computer & "\root\cimv2")
Dim processors As Object = wmi.ExecQuery("Select * from Win32_Processor")
Dim cpu_ids As String = ""
For Each cpu As Object In processors
cpu_ids = cpu_ids & ", " & cpu.ProcessorId
Next cpu
If cpu_ids.Length > 0 Then cpu_ids = cpu_ids.Substring(2)
Return cpu_ids
End Function
End Class
Dieser Code ruft die CPU-ID und die Motherboard-ID ab. Wie kann ich sicherstellen, dass dies auch dann funktioniert, wenn Option strict aktiviert ist?Wie können wir diesen Code mit der Option strict on ausführen lassen?
Warum könnte das ein Problem sein?
Nun, mal sehen. Der Typ von wmi ist Objekt. Das wmi unterstützt nicht unbedingt Methoden wie InstancesOf und SerialNumber
Also, wie können wir das herausziehen?
Ich denke Objekt, das wir von GetObject bekommen haben, ist nicht nur reines Objekt. Ich denke, wir sollten ctype oder direkt in einen passenderen Typ umwandeln. Dieser geeignetere Typ unterstützt Methoden wie InstancesOf, SerialNumber usw.
Welche sind jedoch die entsprechenden Typen?
Haben Sie versucht, das GetObject zu ändern und den ManagementObjectSearcher und seine Klassen zu verwenden? – Steve
Ich verstehe nicht einmal, was es bedeutet –
Der Typ von WMI ist com-Objekte übrigens. Gibt es eine Wrapperklasse, in der ich ctype machen kann? Meinst Du das? –