Microsoft Widnows Key auslesen lassen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Schoko19.

    Microsoft Widnows Key auslesen lassen

    Hallo zusammen,

    ich habe relativ wenig erfahrung im programmieren und wollte meine Frage deshalb an euch richten. Ich habe bisher einen Code "zusammengeschustert" (mit Hilfe von MadAndy's Code) sollte eigentlich aus so funktionieren, tut es jedoch nicht.
    Die Fehlermeldung habe ich gescreenshotet und angehängt. Hoffe ihr könnt mir Helfen.
    Vielen Dank im Voraus

    Bitte auf das richtige Unterforum achten! Verschoben.
    - Solaris
    Bilder
    • fehler_winkeyauslesen.PNG

      79,71 kB, 1.276×760, 224 mal angesehen
    F**k the Society, we are the HighSociety [420]! :D

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

    Kann ich Dir aktuell nciht sagen, wo bei dir das Problem ist.

    Anbei "mein" kompletter funktionierender Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Microsoft.Win32
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    5. MessageBox.Show(WindowsCDKey)
    6. End Sub
    7. #Region "Properties"
    8. ''' <summary>
    9. ''' Reads the Windows CD key from the registry and returns it as string separated by '-' chars.
    10. ''' </summary>
    11. Public Shared ReadOnly Property WindowsCDKey() As String
    12. Get
    13. Dim rKey As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion")
    14. Dim rpk As Byte() = CType(rKey.GetValue("DigitalProductId", 0), Byte())
    15. Dim strKey As String = ""
    16. Const iRPKOffset As Integer = 52
    17. Const strPossibleChars As String = "BCDFGHJKMPQRTVWXY2346789"
    18. Dim i As Integer = 28
    19. Do
    20. Dim lAccu As Long = 0
    21. Dim j As Integer = 14
    22. Do
    23. lAccu *= 256
    24. lAccu += Convert.ToInt64(rpk(iRPKOffset + j))
    25. rpk(iRPKOffset + j) = Convert.ToByte(Convert.ToInt64(Math.Floor(CSng(lAccu) / 24.0F)) And Convert.ToInt64(255))
    26. lAccu = lAccu Mod 24
    27. j -= 1
    28. Loop While j >= 0
    29. i -= 1
    30. strKey = strPossibleChars(CInt(lAccu)).ToString() + strKey
    31. If (0 = ((29 - i) Mod 6)) AndAlso (-1 <> i) Then
    32. i -= 1
    33. strKey = "-" + strKey
    34. End If
    35. Loop While i >= 0
    36. Return strKey
    37. End Get
    38. End Property
    39. ''' <summary>
    40. ''' Reads the Windows CD key from the registry and returns it as string array.
    41. ''' </summary>
    42. Public Shared ReadOnly Property WindowsCDKeyParts() As String()
    43. Get
    44. Dim strKeyParts As String() = WindowsCDKey.Split("-"c)
    45. Return strKeyParts
    46. End Get
    47. End Property
    48. #End Region
    49. End Class


    Edit: Welche VB-Version und Windows-Version hast Du ?- Bei mir läuft dieser Code aktuell unter VB 2010 und Windows Vista 32 bit - könnte noch mit VB 2013 und Windows 7 64bit testen.

    Edit2: Schaue Dir bitte mal folgendes an: Windows Key auslesen - Code Optimierung

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Thias“ ()

    Habe versucht deinen Code zu verwenden, leider bekam ich immernoch den selben Fehler. Dann habe ich mir den von dir vorgeschlagenen Thread angesehen, dessen Code genutzt und nun funktioniert alles super!
    Ich nutze Windows 7 Pro x64, und Visual Basic Express 2010.

    Hier noch den Code den ich jetzt nutzen werde:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Microsoft.Win32
    3. Public Class Form1
    4. Private Function GetProductKey() As String
    5. Dim SubK As RegistryKey = Nothing
    6. If Environment.Is64BitOperatingSystem Then
    7. Using Bk As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
    8. SubK = Bk.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion", RegistryKeyPermissionCheck.ReadSubTree)
    9. End Using
    10. Else
    11. SubK = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion", RegistryKeyPermissionCheck.ReadSubTree)
    12. End If
    13. Dim digitalProductId As Byte() = DirectCast(SubK.GetValue("DigitalProductId", New Byte(-1) {}), Byte())
    14. Dim keyStartIndex As Integer = 52
    15. Dim digits As Char() = "BCDFGHJKMPQRTVWXY2346789".ToCharArray
    16. Dim containsN As Integer = (digitalProductId(keyStartIndex + 14) >> 3) And 1
    17. digitalProductId(keyStartIndex + 14) = Convert.ToByte((digitalProductId(keyStartIndex + 14) And &HF7) Or ((containsN And 2) << 2))
    18. Dim decodedChars As Char() = New Char(28) {}
    19. Dim hexPid As New List(Of Byte)
    20. For i As Integer = keyStartIndex To 67
    21. hexPid.Add(digitalProductId(i))
    22. Next
    23. For i As Integer = 28 To 0 Step -1
    24. ' Every sixth char is a separator.
    25. If (i + 1) Mod 6 = 0 Then
    26. decodedChars(i) = "-"c
    27. Else
    28. ' Do the actual decoding.
    29. Dim digitMapIndex As Integer = 0
    30. For j As Integer = 14 To 0 Step -1
    31. Dim byteValue As Integer = (digitMapIndex << 8) Or hexPid(j)
    32. hexPid(j) = CByte(byteValue \ 24)
    33. digitMapIndex = byteValue Mod 24
    34. decodedChars(i) = digits(digitMapIndex)
    35. Next
    36. End If
    37. Next
    38. If containsN <> 0 Then
    39. Dim firstLetterIndex As Integer = 0
    40. For index As Integer = 0 To 23
    41. If Not decodedChars(0) <> digits(index) Then Exit For
    42. firstLetterIndex = index
    43. Next
    44. Dim keyWithN As String = String.Join(String.Empty, decodedChars.Skip(1)).Replace("-", String.Empty)
    45. keyWithN = String.Concat(keyWithN.Substring(0, firstLetterIndex), "N", keyWithN.Remove(0, firstLetterIndex))
    46. keyWithN = String.Concat(keyWithN.Substring(0, 5), "-", keyWithN.Substring(5, 5), "-", keyWithN.Substring(10, 5), "-", keyWithN.Substring(15, 5), "-", keyWithN.Substring(20, 5))
    47. Return keyWithN
    48. End If
    49. Return String.Join(String.Empty, decodedChars)
    50. End Function
    51. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    52. TextBox1.Text = GetProductKey()
    53. End Sub
    54. End Class
    F**k the Society, we are the HighSociety [420]! :D