2000 / 2003 / XP / Vista Installationsschlüssel auslesen Verfasst am: 01.05.2008, 13:20
Beschreibung: Dieses Snippet liest den Produkt-Installationsschlüssel (Schlüssel auf dem Echtheitszertifikat) und die Seriennummer aus.
Der Schlüssel wird als Listview Item zurückgegeben und kann somit direkt in ein Listview-Steuerelement eingetragen werden.
Funktion: Visual Basic: [code]Public Function sGetXPKey() As ListViewItem
'Registry öffnen und Wert auslesen (byte array) Dim RegKey As RegistryKey = _ Registry.LocalMachine.OpenSubKey("SoftwareMicrosoftWindows NTCurrentVersion", False) Dim bytDPID() As Byte = RegKey.GetValue("DigitalProductID") 'Nur die benötigten Teile ins Array laden ' Key beginnt ab byte 52 und ist 15 Bytes lang. Dim bytKey(14) As Byte '0-14 = 15 bytes Array.Copy(bytDPID, 52, bytKey, 0, 15) 'Unser "Array" beinhaltet nun gültige Zeichen Dim strChar As String = "BCDFGHJKMPQRTVWXY2346789" 'jetzt muss der decodierte Schlüssel zurückgegeben werden Dim strKey As String = ""
For j As Integer = 0 To 24 Dim nCur As Short = 0 For i As Integer = 14 To 0 Step -1 nCur = CShort(nCur * 256 Xor bytKey(i)) bytKey(i) = CByte(Int(nCur / 24)) nCur = CShort(nCur Mod 24) Next strKey = strChar.Substring(nCur, 1) & strKey Next 'nun muss das Ganze in einen String eingestzt werden. For i As Integer = 4 To 1 Step -1 strKey = strKey.Insert(i * 5, "-") Next
Dim strPName As String = RegKey.GetValue("ProductName") Dim strPID As String = RegKey.GetValue("ProductID")
Dim lvi As New ListViewItem lvi.Text = strPName
Try lvi.SubItems.Add(strKey) Catch ex As Exception lvi.SubItems.Add("n.a.") End Try
Try lvi.SubItems.Add(strPID) Catch ex As Exception lvi.SubItems.Add("n.a.") End Try
RegKey.Close() Return lvi End Function [/code]
Quelle: dotnet-snippets.de _________________
evolut!on Newbie
Anmeldedatum: 10.06.2008 Beiträge: 8
Verfasst am: 10.06.2008, 20:09
Kann man die Funktion auch so verwenden, dass der Key als String ausgegeben wird und weiterverwendet werden kann ? _________________
tr4st Überflieger
Anmeldedatum: 16.04.2008 Beiträge: 486
Verfasst am: 10.06.2008, 20:27
Wo liegt das Problem?
Visual Basic: [code]Private Function sGetXPKey() As String
'Registry öffnen und Wert auslesen (byte array) Dim RegKey As Microsoft.Win32.RegistryKey = _ Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SoftwareMicrosoftWindows NTCurrentVersion", False) Dim bytDPID() As Byte = RegKey.GetValue("DigitalProductID") 'Nur die benötigten Teile ins Array laden ' Key beginnt ab byte 52 und ist 15 Bytes lang. Dim bytKey(14) As Byte '0-14 = 15 bytes Array.Copy(bytDPID, 52, bytKey, 0, 15) 'Unser "Array" beinhaltet nun gültige Zeichen Dim strChar As String = "ABCDFGHJKMPQRTVWXY123467890" 'jetzt muss der decodierte Schlüssel zurückgegeben werden Dim strKey As String = ""
For j As Integer = 0 To 24 Dim nCur As Short = 0 For i As Integer = 14 To 0 Step -1 nCur = CShort(nCur * 256 Xor bytKey(i)) bytKey(i) = CByte(Int(nCur / 24)) nCur = CShort(nCur Mod 24) Next strKey = strChar.Substring(nCur, 1) & strKey Next 'nun muss das Ganze in einen String eingestzt werden. For i As Integer = 4 To 1 Step -1 strKey = strKey.Insert(i * 5, "-") Next
Dim strPName As String = RegKey.GetValue("ProductName") Dim strPID As String = RegKey.GetValue("ProductID")