Produktcode von Mainboard nicht auslesbar

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Jörg.

    Produktcode von Mainboard nicht auslesbar

    Guten Morgen :sleeping:

    Ich habe da leider schon wieder ein kleines aber nerviges Problem mit einem Label :cursing:

    Ich versuche mit diesem Code die Modellnummer meines Mainboards herauszufinden :

    VB.NET-Quellcode

    1. Private Function GetBaseBoard() As String
    2. On Error GoTo Error_Handler
    3. Dim objWMIService As Object
    4. Dim colDevices As Object
    5. Dim objDevice As Object
    6. objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    7. colDevices = objWMIService.ExecQuery("Select Product From Win32_BaseBoard ")
    8. For Each objDevice In colDevices
    9. GetBaseBoard = objDevice.Name
    10. Next objDevice
    11. Error_Handler:
    12. colDevices = Nothing
    13. objWMIService = Nothing
    14. End Function
    15. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    16. Label7.Text = (GetBaseBoard())
    17. End Sub
    18. End Class


    Jedoch habe ich das Problem das, wenn ich auf den Button Mainboard klicke das dazugehörige Label nicht mit Infos befüllt wird !


    Wenn ich das ganze jedoch mit dem WMI-Creator mache geht alles perfekt ??
    Habe schon mehrere Wege getestet , zB :

    Quellcode

    1. ​Name,Description,Model,
    usw...
    Dort funktionieren auch welche nur nicht das was ich benötige -->

    Quellcode

    1. ​Product

    Da wird im Label nichts angezeigt

    Hier mal ein paar Bilder zum Verständniss :D
    Bilder
    • Proggi.PNG

      325,68 kB, 639×632, 218 mal angesehen
    • Unbenannt.PNG

      23,63 kB, 350×678, 208 mal angesehen
    • WMI.PNG

      335,89 kB, 1.138×722, 225 mal angesehen
    :D Ein Programm sollte nicht nur Hand und Fuß, sondern auch Herz und Hirn haben. (Michael Anton) :D

    MFG Jörg ;)

    Muss jeder vermeintliche Programmierer ne Signatur haben ??

    Jörg schrieb:

    VB.NET-Quellcode

    1. On Error GoTo Error_Handler
    Falls Du Fehler finden, nicht aber verschleiern willst, streiche diese Zeile ersatzlos.
    Falls nun eine Exception auftritt, informiere uns über deren Inhalt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Der Fehler kommt dann ???

    Ich weis auch nicht warum

    VB.NET-Quellcode

    1. ​End Function
    grün unterstrichen ist ??
    Bilder
    • Unbenannt.PNG

      60,02 kB, 1.271×634, 196 mal angesehen
    :D Ein Programm sollte nicht nur Hand und Fuß, sondern auch Herz und Hirn haben. (Michael Anton) :D

    MFG Jörg ;)

    Muss jeder vermeintliche Programmierer ne Signatur haben ??

    Jörg schrieb:

    grün unterstrichen
    Weil der Return-Value fehlt?
    Welche Imports hast Du in dieser Klasse?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sorry war schnell einkaufen :whistling:

    Ich glaube ich poste hier mal den ganzen Code, damit man weis worum es geht ;)

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Imports OpenHardwareMonitor.Hardware
    2. Imports System
    3. Imports System.Management
    4. Imports System.Windows.Forms
    5. Imports SysLib
    6. Imports SysLib.HardwareInformation
    7. Public Class Form1
    8. Dim Computer As New Computer
    9. Dim i As Integer
    10. Dim strProcessor As Object
    11. Dim GetVideoadapter As String
    12. Dim ValueType As Integer
    13. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    14. Computer.CPUEnabled = True 'Dass er bei .Open() nur die CPU-Daten holt
    15. Computer.Open() 'Öffnet die Funktion zum holen der Information
    16. For i As Integer = 0 To Environment.ProcessorCount - 1 'Alle Kerne werden ermittelt
    17. Next
    18. End Sub
    19. Private Function GetCoreTemp(ByVal Core As Integer) As String
    20. For Each Hardware In Computer.Hardware 'Jede einzelne Hardware heraussuchen
    21. Hardware.Update() 'Die Werte aktualisieren
    22. If Hardware.HardwareType = HardwareType.CPU Then 'Da wir die CPU brauchen, überprüfen wir, ob die aktuelle Hardware die CPU ist.
    23. For Each Sensor In Hardware.Sensors 'Jeden Sensor heraussuchen
    24. If Sensor.SensorType = SensorType.Temperature Then ' Da wir die Temperatur brauchen überprüfen wir, ob der aktuelle Sensor die Temperatur ausliest.
    25. If Sensor.Index = Core Then 'Überprüfen, ob der aktuelle Index der gewünschte Kern ist
    26. Return CDbl(Sensor.Value) 'Wenn alles passt (CPU, Temperatur-Sensor, Kern), wird der Wert zurückgegeben (MH/z)
    27. End If
    28. End If
    29. Next
    30. End If
    31. Next
    32. Return 0.0 'Wenn nichts gefunden wurde, wird '0.0" zurückgegeben.
    33. End Function
    34. Private Function GetCoreClock(ByVal Core As Integer) As Double
    35. For Each Hardware In Computer.Hardware 'Jede einzelne Hardware heraussuchen
    36. Hardware.Update() 'Die Werte aktualisieren
    37. If Hardware.HardwareType = HardwareType.CPU Then 'Da wir die CPU brauchen, überprüfen wir, ob die aktuelle Hardware die CPU ist.
    38. For Each Sensor In Hardware.Sensors 'Jeden Sensor heraussuchen
    39. If Sensor.SensorType = SensorType.Temperature Then ' Da wir die Temperatur brauchen überprüfen wir, ob der aktuelle Sensor die Temperatur ausliest.
    40. If Sensor.Index = Core + 1 Then 'Überprüfen, ob der aktuelle Index der gewünschte Kern ist, aber da auch noch der Bus-Speed exisiert, muss man hier Core + 1 überprüfen
    41. Return CDbl(Sensor.Value) 'Wenn alles passt (CPU, Temperatur-Sensor, Kern), wird der Wert zurückgegeben (MH/z)
    42. End If
    43. End If
    44. Next
    45. End If
    46. Next
    47. Return 0.0 'Wenn nichts gefunden wurde, wird '0.0" zurückgegeben.
    48. End Function
    49. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    50. Dim txt = ""
    51. For i As Integer = 0 To Environment.ProcessorCount - 1
    52. txt &= String.Format("Core {0}: = {1}°C{2}", i + 1, GetCoreTemp(i), Environment.NewLine)
    53. Next
    54. Label1.Text = txt
    55. End Sub
    56. Public Function GetArchitecture() As String
    57. Return If(Environment.Is64BitOperatingSystem, "64 Bit", "32 Bit")
    58. End Function
    59. Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click
    60. Label3.Text = (System.Environment.OSVersion.VersionString.ToString)
    61. If System.Environment.Is64BitOperatingSystem = True Then
    62. Label4.Text = "x64 Bit"
    63. Else
    64. Label4.Text = "x86 Bit"
    65. End If
    66. End Sub
    67. Private Function GetVideoCardName() As String
    68. On Error GoTo Error_Handler
    69. Dim objWMIService As Object
    70. Dim colDevices As Object
    71. Dim objDevice As Object
    72. objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    73. colDevices = objWMIService.ExecQuery("Select Name From Win32_VideoController")
    74. For Each objDevice In colDevices
    75. GetVideoCardName = objDevice.Name
    76. Next objDevice
    77. Error_Handler:
    78. colDevices = Nothing
    79. objWMIService = Nothing
    80. End Function
    81. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    82. Label5.Text = (GetVideoCardName())
    83. End Sub
    84. Public Function GetBaseBoard() As String
    85. Dim objWMIService As Object
    86. Dim colDevices As Object
    87. Dim objDevice As Object
    88. objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    89. colDevices = objWMIService.ExecQuery("Select Product From Win32_BaseBoard ")
    90. For Each objDevice In colDevices
    91. GetBaseBoard = objDevice.Name
    92. Next objDevice
    93. End Function
    94. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    95. Label7.Text = (GetBaseBoard())
    96. End Sub
    97. End Class



    Und ich kann Dir gar-nicht genug danken für Deine Hilfe @RodFromGermany :thumbsup:
    :D Ein Programm sollte nicht nur Hand und Fuß, sondern auch Herz und Hirn haben. (Michael Anton) :D

    MFG Jörg ;)

    Muss jeder vermeintliche Programmierer ne Signatur haben ??

    Jörg schrieb:

    grün unterstrichen ist ??

    RodFromGermany schrieb:

    Weil der Return-Value fehlt?
    Mach es mal so:

    VB.NET-Quellcode

    1. Private Function GetBaseBoard() As String
    2. 'On Error GoTo Error_Handler
    3. Dim objWMIService As Object
    4. Dim colDevices As Object
    5. Dim objDevice As Object
    6. objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    7. colDevices = objWMIService.ExecQuery("Select Product From Win32_BaseBoard ")
    8. Dim txt = ""
    9. For Each objDevice In colDevices
    10. Try
    11. txt &= objDevice.Name & Environment.NewLine
    12. Catch ex As Exception
    13. txt &= objDevice.ToString & Environment.NewLine
    14. End Try
    15. Next objDevice
    16. Return txt
    17. End Function
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dort kommt dann

    Quellcode

    1. System.__ComObject
    im Label !

    Soll ich dort den

    Quellcode

    1. Error_Handler
    auch mal entfernen ???


    EDIT GETESTET : Macht das gleiche !
    Bilder
    • Unbenannt.PNG

      89,23 kB, 495×533, 212 mal angesehen
    :D Ein Programm sollte nicht nur Hand und Fuß, sondern auch Herz und Hirn haben. (Michael Anton) :D

    MFG Jörg ;)

    Muss jeder vermeintliche Programmierer ne Signatur haben ??

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Jörg“ ()

    Jörg schrieb:

    System.__ComObject
    Jou.
    Ansonsten tritt eine Exception auf, da kann ich Dir leider nicht helfen.
    Bilder
    • Exception.jpg

      43,03 kB, 987×184, 195 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nicht so schlimm ;) Ich Danke Dir trotzdem für die Mühe :D

    Schönen Tag noch !!!!!!!

    Eventuell weis ja jemand anders Bescheid , und ich werde auch noch weiter suchen ;)
    :D Ein Programm sollte nicht nur Hand und Fuß, sondern auch Herz und Hirn haben. (Michael Anton) :D

    MFG Jörg ;)

    Muss jeder vermeintliche Programmierer ne Signatur haben ??
    So ich habe es jetzt noch mit :

    Quellcode

    1. Win32_ComputerSystem/Model​

    Quellcode

    1. Win32_ComputerSystem/Name​


    probiert hatte jedoch keinen Erfolg ?(

    Auch mein Code ist etwas kürzer geworden :

    VB.NET-Quellcode

    1. Public Function GetComputerSystem() As String
    2. Dim ComputerSystem As String
    3. ComputerSystem = Environment.MachineName
    4. Return ComputerSystem
    5. End Function
    6. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    7. Label7.Text = (GetComputerSystem())
    8. End Sub
    9. End Class


    Zeigt mir aber leider immer nur den Computernamen an ! ( Komischerweise wird im WMI-Creator das Mainboard Modell angezeigt )

    Kann das eventuell an erweiterten Berechtigungen liegen ? (Starte VS als Administrator)
    Bilder
    • Unbenannt.PNG

      330,25 kB, 1.152×731, 188 mal angesehen
    :D Ein Programm sollte nicht nur Hand und Fuß, sondern auch Herz und Hirn haben. (Michael Anton) :D

    MFG Jörg ;)

    Muss jeder vermeintliche Programmierer ne Signatur haben ??
    So habe das Problem selbst (bzw. mit nem Freund ) lösen können :thumbsup:

    Wenn es mal für jemanden Interessant ist --> Hier die Lösung 8-)

    VB.NET-Quellcode

    1. Private Function GetBaseBoard() As String
    2. Dim txt As String = ""
    3. Dim strComputer As String = "."
    4. Dim objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    5. Dim colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem")
    6. For Each objItem In colItems
    7. txt += objItem.Model
    8. Next
    9. Return txt
    10. End Function


    Danke nochmal an @RodFromGermany für die Großartige Hilfe :thumbsup: :thumbsup:
    :D Ein Programm sollte nicht nur Hand und Fuß, sondern auch Herz und Hirn haben. (Michael Anton) :D

    MFG Jörg ;)

    Muss jeder vermeintliche Programmierer ne Signatur haben ??