Code-Beispiel
Lesen und Schreiben von Windows-Registry-Schlüsseln
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | Sebastian | 15.09.2010 |
Im Folgenden zwei einfache Funktionen zum Lesen und Schreiben von Registry-Werten (Windows-Registrierung). Die Wertetypen DWORD, STRING und BINARY können gelesen, STRING und DWORD zudem geschrieben werden.
Der Code wurde ursprünglich im internationalen FreeBASIC-Forum von vdecampo mit englischen Kommentaren zur Verfügung gestellt. Die Quelltexte können nach Belieben verwendet, erweitert und verbessert werden ("Feel free to use, expand, or improve").
'
' Einfache Funktionen zum Lesen/Schreiben von Windows-Registry-Schluesseln
' Code von VB6 auf FB portiert von Vincent DeCampo (2010)
' Urspruenglicher Autor nicht bekannt.
'
' Quelle:
' http://www.freebasic.net/forum/viewtopic.php?t=16455
'
#Include "windows.bi"
#Include "vbcompat.bi"
' Moegliche Registry-Datentypen
Enum InTypes
ValNull = 0
ValString = 1
ValXString = 2
ValBinary = 3
ValDWord = 4
ValLink = 6
ValMultiString = 7
ValResList = 8
End Enum
' Definitionen der Registry-Sektionen
'Const HKEY_CLASSES_ROOT = &H80000000
'Const HKEY_CURRENT_USER = &H80000001
'Const HKEY_LOCAL_MACHINE = &H80000002
'Const HKEY_USERS = &H80000003
'Const HKEY_PERFORMANCE_DATA = &H80000004
'Const HKEY_CURRENT_CONFIG = &H80000005
' **** Schluessel lesen ****
Function ReadRegistry(Byval Group As HKEY, Byval Section As LPCSTR, _
Byval Key As LPCSTR) As String
Dim As DWORD lDataTypeValue, lValueLength
Dim As String*2048 sValue
Dim As String Tstr1, Tstr2
Dim As HKEY lKeyValue
Dim As Integer lResult
Dim As Double td
sValue = ""
lResult = RegOpenKey(Group, Section, @lKeyValue)
lValueLength = Len(sValue)
lResult = RegQueryValueEx(lKeyValue, Key, 0&, @lDataTypeValue, _
Cast(Byte Ptr,@sValue), @lValueLength)
If (lResult = 0) Then
Select Case lDataTypeValue
Case REG_DWORD
td = Asc(Mid(sValue, 1, 1)) + &H100& * Asc(Mid(sValue, 2, 1)) + &H10000 * _
Asc(Mid(sValue, 3, 1)) + &H1000000 * Cdbl(Asc(Mid(sValue, 4, 1)))
sValue = Format(td, "000")
Case REG_BINARY
' Binaerdaten als Hexadezimalstring zurueckgeben (2 Zeichen pro Byte)
Tstr2 = ""
For I As Integer = 1 To lValueLength
Tstr1 = Hex(Asc(Mid(sValue, I, 1)))
If Len(Tstr1) = 1 Then Tstr1 = "0" & Tstr1
Tstr2 += Tstr1
Next
sValue = Tstr2
Case Else
sValue = Left(sValue, lValueLength - 1)
End Select
End If
lResult = RegCloseKey(lKeyValue)
Return sValue
End Function
' **** Schluessel schreiben ****
Sub WriteRegistry (Byval Group As HKEY, Byval Section As LPCSTR, Byval Key As LPCSTR, _
Byval ValType As InTypes, value As String)
Dim lResult As Integer
Dim lKeyValue As HKEY
Dim lNewVal As DWORD
Dim sNewVal As String * 2048
lResult = RegCreateKey(Group, Section, @lKeyValue)
If ValType = ValDWord Then
lNewVal = CUInt(value)
lResult = RegSetValueEx(lKeyValue, Key, 0&, ValType, _
Cast(Byte Ptr,@lNewVal), SizeOf(DWORD))
Else
If ValType = ValString Then
sNewVal = value & Chr(0)
lResult = RegSetValueEx(lKeyValue, Key, 0&, ValString, _
Cast(Byte Ptr,@sNewVal), Len(sNewVal))
Endif
End If
lResult = RegFlushKey(lKeyValue)
lResult = RegCloseKey(lKeyValue)
End Sub
Verwendungsbeispiel
Fügen Sie den folgenden Beispielcode ans Ende des Programms oben an, um die Funktionen zu testen.
Hinweis: Standardmäßig beendet sich das Programm (durch END), bevor mit WriteRegistry ein Wert in Ihre Windows-Registry geschrieben wird, d.h. der Code führt in folgender Form keine Änderungen an der Registry durch (nur Lese-Zugriff).
Dim regpath As String
Dim keyname As String
' **** Einen Schluessel lesen ****
regpath = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
keyname = "ProductName"
Print keyname & "=" & ReadRegistry(HKEY_LOCAL_MACHINE,regpath,keyname)
' Ausgabe zum Beispiel:
' ProductName=Microsoft Windows XP
Print "Fertig. Beliebige Taste druecken."
Sleep ' Auf Tastendruck warten
End ' Programm beenden. Wenn diese Zeile entfernt wird, wird im
' Folgenden ein Schluessel angelegt/geschrieben!
' Vorsicht: Bearbeitung der Registry!
' **** Einen Schluessel schreiben ****
regpath = "SOFTWARE\MeineSoftwareFirma"
keyname = "MeinEintrag"
WriteRegistry (HKEY_CURRENT_USER,regpath, keyname, ValDword, "25")
Print "Fertig. Zum Beenden beliebige Taste druecken."
Sleep
End
Zusätzliche Informationen und Funktionen |
- Das Code-Beispiel wurde am 15.09.2010 von Sebastian angelegt.
- Die aktuellste Version wurde am 15.09.2010 von Sebastian gespeichert.
|
|