Windows Produkt ID aus Registrykey auslesen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Coder9292.

    Windows Produkt ID aus Registrykey auslesen

    Hallo liebe VB-Community,

    da ich nun schon länger vergebens versuche den Registrykey Wert der Windows Produkt ID auszulesen wende ich mich an euch.
    Mein derzeitiger Code sieht so aus:

    VB.NET-Quellcode

    1. Imports Microsoft.Win32

    VB.NET-Quellcode

    1. Dim key As RegistryKey
    2. key = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion")
    3. Dim productID As Byte = key.GetValue("ProductId", 0)


    Ich habe es auch schon auf andere Wege versucht aber ich bekomme nicht den gewünschten Wert zurück ?(

    *EDIT* Und ja ich habe bereits die anderen Themen durchgearbeitet und diese funktionieren auch nicht bei mir.

    Grüße
    Coder9292
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Coder9292“ ()

    Danke für deine Antwort aber bei mir bekomme ich mit diesem Code den Wert 0 zurück. Und das kann ja nicht der Windows Produkt ID entpsrechen :/
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292
    Ja wir meinen schon die gleiche Nummer. Ich finde den Registry Schlüssel der ID auch aber ich kann diesen nicht per Programm auslesen. Der Wert des Keys ist bei mir auch ~20 Stellen lang.
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292
    Hast du's schon über WMI versucht?

    VB.NET-Quellcode

    1. Public Function getProductId() As String
    2. Dim res As String = String.Empty
    3. Dim propName As String = "SerialNumber"
    4. Dim query As String = "SELECT SerialNumber FROM Win32_OperatingSystem"
    5. Dim moc As ManagementObjectCollection = New ManagementObjectSearcher(query).Get
    6. For Each mo As ManagementObject In moc
    7. For Each pd As PropertyData In mo.Properties
    8. If pd.Name = propName Then
    9. return pd.Value.ToString
    10. End If
    11. Next
    12. Next
    13. Return res
    14. End Function


    VB.NET-Quellcode

    1. Dim productID As String = getProductId()



    Edit: Jetzt seh ich gerade noch diese Möglichkeit.

    VB.NET-Quellcode

    1. Public Function getProductIdLINQ() As String
    2. 'http://alexmg.com/getting-the-windows-product-id-using-wmi/
    3. Const queryString As String = "SELECT SerialNumber FROM Win32_OperatingSystem"
    4. Return (From mo In New ManagementObjectSearcher(queryString).Get _
    5. From pd In DirectCast(mo, ManagementObject).Properties _
    6. Where DirectCast(pd, PropertyData).Name = "SerialNumber" _
    7. Select DirectCast(DirectCast(pd, PropertyData).Value, String)).FirstOrDefault()
    8. End Function



    Edit: Für die die es ganz kurz haben wollen, ohne Gewährleistung das es immer funkst.

    VB.NET-Quellcode

    1. Dim query As String = "SELECT SerialNumber FROM Win32_OperatingSystem"
    2. Dim moc As ManagementObjectCollection = New ManagementObjectSearcher(query).Get
    3. Return CType(CType(moc(0), ManagementObject).Properties("SerialNumber"), PropertyData).Value.ToString
    4. 'oder
    5. Dim query As String = "SELECT SerialNumber FROM Win32_OperatingSystem"
    6. Return CType(CType((New ManagementObjectSearcher(query).Get)(0), ManagementObject).Properties("SerialNumber"), PropertyData).Value.ToString


    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „exc-jdbi“ ()

    Bei dem Code wird mir folgendes rot unterstrichen:
    - ManagementObjectCollection
    - ManagementObjectSearcher(query).Get
    - ManagementObject

    VB.NET-Quellcode

    1. *Code von exc-jdbi*
    2. Public Function getProductId() As String
    3. Dim res As String = String.Empty
    4. Dim propName As String = "SerialNumber"
    5. Dim query As String = "SELECT SerialNumber FROM Win32_OperatingSystem"
    6. Dim moc As ManagementObjectCollection = New ManagementObjectSearcher(query).Get
    7. For Each mo As ManagementObject In moc
    8. For Each pd As PropertyData In mo.Properties
    9. If pd.Name = propName Then
    10. res = pd.Value.ToString
    11. End If
    12. Next
    13. Next
    14. Return res
    15. End Function
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292

    Coder9292 schrieb:

    Bei dem Code wird mir folgendes rot unterstrichen:
    - ManagementObjectCollection
    - ManagementObjectSearcher(query).Get
    - ManagementObject


    Hast du wenigsten EINMAL selbst eine der 3 Dinge gegoogelt ?
    Sofern man das getan hätte stünde auf der ersten Google Seite gleich die Lösung.
    Steht sogar wenn man mit dem Mauszeiger über das Rot unterstrichene geht die Lösung des Problems.


    Du musst System.Managment Importieren. Falls nicht geht ( bzw sagt sei nicht gefunden )
    musst du noch die Referenz zur system managment dll einfügen.

    greetz
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    @xChRoNiKx Ich habe System.Managment importiert aber es wird mir trotzdem rot unterstrichen. Ganz so blöd bin ich jetzt auch nicht ;)
    @exc-jdbi Danke für den Nachtrag. Weißt du warum die 3 Begriffe bei mir Rot unterstrichen werden?

    Grüße
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292
    Menu Project >> add Reference ..

    Importe, je nachdem wie es gelöst wird auch noch die Reflection und Collections.Generic

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports System.Reflection
    4. Imports System.Management
    5. Imports System.Collections.Generic


    Freundliche Grüsse

    exc-jdbi
    Bilder
    • 0001.jpg

      49,24 kB, 482×406, 255 mal angesehen
    • 0002.jpg

      11,8 kB, 283×266, 275 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    Hm das ist mir alles eigentlich zu lang. Es muss doch eine Möglichkeit geben, wie man diese ID mit wenig Code zuverlässig auslesen kann :/
    Aber trotzdem Danke @exc-jdbi
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292
    Zu Lang ?

    Du addest eine Referenz Importierst und hast den Code sogar.
    Da ist nichts zu lang.

    Übrigens unter Windows 10 x64 funktioniert der Code von @exc-jdbi wunderbar @Coder9292

    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xChRoNiKx“ ()

    Bei mir funkst es einwandfrei. Leg dir ein paar gute Tutorials zurecht, um die Grundkenntnisse zu lernen.

    Freundliche Grüsse

    exc-jdbi
    Dateien

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()