VB 5/6-Tipp 0107: Registry lesen und schreiben, Schlüssel anlegen und löschen
von ActiveVB
Beschreibung
Das Schreiben und Lesen in der Registry ist für viele Aufgaben wichtig, teilweise sogar unerlässlich. Die VB-eigenen Funktionen SaveSetting, GetSetting etc. lassen zwar auf einen Teilbereich zugreifen der aber bei weitem nicht alle Möglichkeiten ausreizt. Dieses hier vorgestellte Beispiel ermöglicht den Zugriff auf auf alle vorhandenen Schlüssel.
Änderung am 08.03.2003: Im Code steht nun (auskommentiert) eine Alternative, wie man einen Schlüssel unter Windows 2000 löschen kann.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: RegCloseKey, RegCreateKeyExA (RegCreateKeyEx), RegDeleteKeyA (RegDeleteKey), RegDeleteValueA (RegDeleteValue), RegFlushKey, RegOpenKeyExA (RegOpenKeyEx), RegQueryValueExA (RegQueryValueEx), RegSetValueExA (RegSetValueEx), RegSetValueExA (RegSetValueEx_Str), SHDeleteKeyA (SHDeleteKey) | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- ' Es muss ein Verweis auf 'Standard OLE Types' gesetzt werden. ' Es muss ein Verweis auf 'Microsoft DAO 3.0 Object Library' gesetzt werden. '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Listen-Steuerelement "List1" ' Steuerelement: Schaltfläche "Command8" ' Steuerelement: Rahmensteuerelement "Frame6" ' Steuerelement: Textfeld "Text1" auf Frame6 ' Steuerelement: Textfeld "Text17" auf Frame6 ' Steuerelement: Textfeld "Text16" auf Frame6 ' Steuerelement: Textfeld "Text15" auf Frame6 ' Steuerelement: Textfeld "Text14" auf Frame6 ' Steuerelement: Textfeld "Text13" auf Frame6 ' Steuerelement: Textfeld "Text9" auf Frame6 ' Steuerelement: Textfeld "Text10" auf Frame6 ' Steuerelement: Textfeld "Text11" auf Frame6 ' Steuerelement: Textfeld "Text12" auf Frame6 ' Steuerelement: Schaltfläche "Command5" auf Frame6 ' Steuerelement: Schaltfläche "Command4" auf Frame6 ' Steuerelement: Textfeld "Text8" auf Frame6 ' Steuerelement: Textfeld "Text7" auf Frame6 ' Steuerelement: Textfeld "Text6" auf Frame6 ' Steuerelement: Textfeld "Text5" auf Frame6 ' Steuerelement: Textfeld "Text4" auf Frame6 ' Steuerelement: Textfeld "Text3" auf Frame6 ' Steuerelement: Textfeld "Text2" auf Frame6 ' Steuerelement: Schaltfläche "Command3" auf Frame6 ' Steuerelement: Schaltfläche "Command6" auf Frame6 ' Steuerelement: Schaltfläche "Command7" auf Frame6 ' Steuerelement: Schaltfläche "Command2" auf Frame6 ' Steuerelement: Schaltfläche "Command1" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label5" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label4" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label3" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label2" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label1" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label15" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label14" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label13" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label11" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label9" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label12" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label10" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label8" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label7" auf Frame6 ' Steuerelement: Beschriftungsfeld "Label6" auf Frame6 Option Explicit Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _ Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal _ lpSubKey As String, ByVal ulOptions As Long, ByVal _ samDesired As Long, phkResult As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" _ (ByVal hKey As Long) As Long Private Declare Function RegQueryValueEx Lib "advapi32.dll" _ Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal _ lpValueName As String, ByVal lpReserved As Long, _ lpType As Long, lpData As Any, lpcbData As Any) As Long Private Declare Function RegCreateKeyEx Lib "advapi32.dll" _ Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal _ lpSubKey As String, ByVal Reserved As Long, ByVal _ lpClass As String, ByVal dwOptions As Long, ByVal _ samDesired As Long, ByVal lpSecurityAttributes As Any, _ phkResult As Long, lpdwDisposition As Long) As Long Private Declare Function RegFlushKey Lib "advapi32.dll" (ByVal _ hKey As Long) As Long Private Declare Function RegSetValueEx Lib "advapi32.dll" _ Alias "RegSetValueExA" (ByVal hKey As Long, ByVal _ lpValueName As String, ByVal Reserved As Long, ByVal _ dwType As Long, lpData As Long, ByVal cbData As Long) _ As Long Private Declare Function RegSetValueEx_Str Lib "advapi32.dll" _ Alias "RegSetValueExA" (ByVal hKey As Long, ByVal _ lpValueName As String, ByVal Reserved As Long, ByVal _ dwType As Long, ByVal lpData As String, ByVal cbData As _ Long) As Long Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias _ "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As _ String) As Long Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias _ "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName _ As String) As Long 'Nur für Windows 2k/XP Private Declare Function SHDeleteKey Lib "shlwapi.dll" Alias "SHDeleteKeyA" _ (ByVal hKey As Long, ByVal pszSubKey As String) As Long Private Const HKEY_CLASSES_ROOT As Long = &H80000000 Private Const HKEY_CURRENT_USER As Long = &H80000001 Private Const HKEY_LOCAL_MACHINE As Long = &H80000002 Private Const HKEY_USERS As Long = &H80000003 Private Const HKEY_PERFORMANCE_DATA As Long = &H80000004 Private Const HKEY_CURRENT_CONFIG As Long = &H80000005 Private Const HKEY_DYN_DATA As Long = &H80000006 Private Const KEY_QUERY_VALUE As Long = &H1 Private Const KEY_SET_VALUE As Long = &H2 Private Const KEY_CREATE_SUB_KEY As Long = &H4 Private Const KEY_ENUMERATE_SUB_KEYS As Long = &H8 Private Const KEY_NOTIFY As Long = &H10 Private Const KEY_CREATE_LINK As Long = &H20 Private Const KEY_READ As Long = KEY_QUERY_VALUE Or _ KEY_ENUMERATE_SUB_KEYS _ Or KEY_NOTIFY Private Const KEY_ALL_ACCESS As Long = KEY_QUERY_VALUE Or _ KEY_SET_VALUE Or _ KEY_CREATE_SUB_KEY Or _ KEY_ENUMERATE_SUB_KEYS Or _ KEY_NOTIFY Or _ KEY_CREATE_LINK Private Const ERROR_SUCCESS As Long = 0& Private Const REG_NONE As Long = 0& Private Const REG_SZ As Long = 1& Private Const REG_EXPAND_SZ As Long = 2& Private Const REG_BINARY As Long = 3& Private Const REG_DWORD As Long = 4& Private Const REG_DWORD_LITTLE_ENDIAN As Long = 4& Private Const REG_DWORD_BIG_ENDIAN As Long = 5& Private Const REG_LINK As Long = 6& Private Const REG_MULTI_SZ As Long = 7& Private Const REG_OPTION_NON_VOLATILE As Long = &H0& Private RegRoot As Long Private Sub Command8_Click() Call Shell("regedit.exe", vbNormalFocus) End Sub Private Sub Form_Load() 'Voreinstellungen eintragen Text1.Text = "Test-Ordner" Text2.Text = "Test-Ordner" Text3.Text = "Test-Ordner" Text4.Text = "Wert-Long" Text5.Text = "12345" Text6.Text = "Test-Ordner" Text7.Text = "Wert-String" Text8.Text = "Hallo" Text9.Text = "Test-Ordner" Text10.Text = "Wert-Long" Text11.Text = "Test-Ordner" Text12.Text = "Wert-String" Text13.Text = "Test-Ordner" Text14.Text = "Wert-Long" Text15.Text = "Test-Ordner" Text16.Text = "Wert-String" Text17.Text = "Test-Ordner" List1.AddItem "HKEY_CLASSES_ROOT" List1.ItemData(0) = HKEY_CLASSES_ROOT List1.AddItem "HKEY_CURRENT_USER" List1.ItemData(1) = HKEY_CURRENT_USER List1.AddItem "HKEY_LOCAL_MACHINE" List1.ItemData(2) = HKEY_LOCAL_MACHINE List1.AddItem "HKEY_USERS" List1.ItemData(3) = HKEY_USERS List1.AddItem "HKEY_PERFORMANCE_DATA" List1.ItemData(4) = HKEY_PERFORMANCE_DATA List1.AddItem "HKEY_CURRENT_CONFIG" List1.ItemData(5) = HKEY_CURRENT_CONFIG List1.AddItem "HKEY_DYN_DATA" List1.ItemData(6) = HKEY_DYN_DATA List1.ListIndex = 1 End Sub Private Sub List1_Click() 'Bei Klick Hauptverzeichnis wechseln Frame6.Caption = List1.List(List1.ListIndex) RegRoot = List1.ItemData(List1.ListIndex) End Sub Private Sub Command1_Click() Dim Result& 'Schlüssel erstellen Result = RegKeyCreate(RegRoot, Text1.Text) Select Case Result Case 0: Label5.Caption = "Fehler beim Erstellen" Case 1: Label5.Caption = "Ok, Pfad neu erstellt" Case 2: Label5.Caption = "Ok, Pfad existierte schon" End Select End Sub Private Sub Command2_Click() Dim Result& 'Testen ob Schlüssel existiert Result = RegKeyExist(RegRoot, Text2.Text) If Result = 0 Then Label6.Caption = "vorhanden" Else Label6.Caption = "nicht vorhanden" End If End Sub Private Sub Command3_Click() Dim Result&, LngInt& 'Longwert ein ein Feld schreiben LngInt = CLng(Val(Text5.Text)) Result = RegValueSet(RegRoot, Text3.Text, Text4.Text, LngInt) If Result = 0 Then Label7.Caption = "Ok" Else Label7.Caption = "Fehler" End If End Sub Private Sub Command4_Click() Dim Result&, StrVar$ 'Stringwert in ein Feld schreiben StrVar = CStr(Text8.Text) Result = RegValueSet(RegRoot, Text6.Text, Text7.Text, StrVar) If Result = 0 Then Label8.Caption = "Ok" Else Label8.Caption = "Fehler" End If End Sub Private Sub Command5_Click() Dim Result&, Value As Variant 'Longwert auslesen Result = RegValueGet(RegRoot, Text9.Text, Text10.Text, Value) If Result = 0 Then Label9.Caption = CStr(Value) Label10.Caption = "Ok" Else Label9.Caption = "" Label10.Caption = "Fehler" End If 'Stringwert auslesen Result = RegValueGet(RegRoot, Text11.Text, Text12.Text, Value) If Result = 0 Then Label11.Caption = CStr(Value) Label12.Caption = "Ok" Else Label11.Caption = "" Label12.Caption = "Fehler" End If End Sub Private Sub Command6_Click() Dim Result& 'Feld des Longwertes löschen Result = RegFieldDelete(RegRoot, Text13.Text, Text14.Text) If Result = 0 Then Label13.Caption = "Ok" Else Label13.Caption = "Fehler" End If 'Feld des Srtingwertes löschen Result = RegFieldDelete(RegRoot, Text15.Text, Text16.Text) If Result = 0 Then Label14.Caption = "Ok" Else Label14.Caption = "Fehler" End If End Sub Private Sub Command7_Click() Dim Result& 'Schlüssel löschen Result = RegKeyDelete(RegRoot, Text17.Text) 'Alternative für Windows 2k/XP User 'Dim Key As Long 'RegOpenKeyEx RegRoot, Text17.Text + Chr$(0), 0, KEY_ALL_ACCESS, Key 'Result& = SHDeleteKey(Key, Text17.Text + Chr$(0)) 'RegCloseKey (Key) If Result = 0 Then Label15.Caption = "Ok" Else Label15.Caption = "Fehler" End If End Sub Function RegKeyExist(Root&, Key$) As Long Dim Result&, hKey& 'Prüfen ob ein Schlüssel existiert Result = RegOpenKeyEx(Root, Key, 0, KEY_READ, hKey) If Result = ERROR_SUCCESS Then Call RegCloseKey(hKey) RegKeyExist = Result End Function Function RegKeyCreate(Root&, Newkey$) As Long Dim Result&, hKey&, Back& 'Neuen Schlüssel erstellen Result = RegCreateKeyEx(Root, Newkey, 0, vbNullString, _ REG_OPTION_NON_VOLATILE, _ KEY_ALL_ACCESS, 0&, hKey, Back) If Result = ERROR_SUCCESS Then Result = RegFlushKey(hKey) If Result = ERROR_SUCCESS Then Call RegCloseKey(hKey) RegKeyCreate = Back End If End Function Private Function RegKeyDelete(Root&, Key$) As Long 'Schlüssel erstellen RegKeyDelete = RegDeleteKey(Root, Key) End Function Private Function RegFieldDelete(Root&, Key$, Field$) As Long Dim Result&, hKey& 'Feld löschen Result = RegOpenKeyEx(Root, Key, 0, KEY_ALL_ACCESS, hKey) If Result = ERROR_SUCCESS Then Result = RegDeleteValue(hKey, Field) Result = RegCloseKey(hKey) End If RegFieldDelete = Result End Function Function RegValueSet(Root&, Key$, Field$, Value As Variant) As Long Dim Result&, hKey&, s$, l& 'Wert in ein Feld der Registry schreiben Result = RegOpenKeyEx(Root, Key, 0, KEY_ALL_ACCESS, hKey) If Result = ERROR_SUCCESS Then Select Case VarType(Value) Case vbInteger, vbLong l = CLng(Value) Result = RegSetValueEx(hKey, Field, 0, REG_DWORD, l, 4) Case vbString s = CStr(Value) Result = RegSetValueEx_Str(hKey, Field, 0, REG_SZ, s, _ Len(s) + 1) End Select Result = RegCloseKey(hKey) End If RegValueSet = Result End Function Function RegValueGet(Root&, Key$, Field$, Value As Variant) As Long Dim Result&, hKey&, dwType&, Lng&, Buffer$, l& 'Wert aus einem Feld der Registry auslesen Result = RegOpenKeyEx(Root, Key, 0, KEY_READ, hKey) If Result = ERROR_SUCCESS Then Result = RegQueryValueEx(hKey, Field, 0&, dwType, ByVal 0&, l) If Result = ERROR_SUCCESS Then Select Case dwType Case REG_SZ Buffer = Space$(l + 1) Result = RegQueryValueEx(hKey, Field, 0&, _ dwType, ByVal Buffer, l) If Result = ERROR_SUCCESS Then Value = Buffer Case REG_DWORD Result = RegQueryValueEx(hKey, Field, 0&, dwType, Lng, l) If Result = ERROR_SUCCESS Then Value = Lng End Select End If End If If Result = ERROR_SUCCESS Then Result = RegCloseKey(hKey) RegValueGet = Result End Function '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 40 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Steffen am 04.02.2011 um 18:44
Der Code funktioniert nicht, wenn unter Windows 7 64bit ein Schlüssel unter HKEY_LOCAL_MACHINE erstellt werden soll.
Kommentar von Kasimir am 15.01.2011 um 16:08
Hallo!
Anders als bei dem Beitrag von Torsten vom 30.08.2010 kann ich nur sagen, dass der Code unter Windows7 64bit bei mir ohne Probleme funktioniert.
Gruß,
Kasimir
Kommentar von Torsten am 30.08.2010 um 16:37
Dieser Tipp funktioniert nicht mehr unter Windows 7 (zumindest unter 64 Bit).
Kommentar von Stephan Quandt am 19.12.2006 um 12:13
Hallo,
ich hatte da ein Problem mit virtuellen und physischen ComPorts, das ich jetzt mit Teilen dieses Codes beheben kann. Leider nur , wenn ich die Key´s wirklich ändern darf. Und da schließe ich mich der Frage von Stefan Payer (am 17.02.2004 um 10:31 ):
"Vermisse an dem Beispiel die Sicherheitseinstellungen. RegSetKeySecurity kann die Sicherheitseinstellungen in der Registry setzen. Würde gerne mehr über diese Funktionen erfahren." an "Weiß jemand etwas über die Funktion "RegSetKeySecurity" oder zu dem Thema "Kurzzeitiges Ändern und Zurücksetzen der Berechtigugseinstellungen von Schlüsseln"
Kommentar von rudiratlos am 09.03.2006 um 10:48
prima code , funktioniert bei mir unter winxp pro ohne fehler
Kommentar von Gerhard am 05.03.2006 um 10:34
Private Sub Command1_Click()
Dim Result&
' Die folgende Funktion überprüft den Hauptschlüssel
SubKey = HKEY_pruefen(RegRoot, Text1.Text)
Result = RegKeyCreate(RegRoot, SubKey)
Select Case Result
Case 0: Label5.Caption = "Fehler beim Erstellen"
Case 1: Label5.Caption = "Ok, Pfad neu erstellt"
Case 2: Label5.Caption = "Ok, Pfad existierte schon"
End Select
End Sub
'---------------------------------------------------------------------------------------
Function HKEY_pruefen(RegRoot As Long, SubKey As String) As String
' Abfrage ob es sich um HKEY_LOCAL_MACHINE oder HKEY_USER handelt _
wenn ja dann wird der Key z.B. im SubKey "SOFTWARE" bzw. ".DEFAULT\Software" erstellt.
If RegRoot = HKEY_LOCAL_MACHINE Then
HKEY_prüfen = "SOFTWARE\" & SubKey
ElseIf RegRoot = HKEY_USERS Then
HKEY_prüfen = ".DEFAULT\Software\" & SubKey
Else
HKEY_prüfen = SubKey
End If
End Function
Kommentar von Gerhard am 01.03.2006 um 22:28
Sobald ich in obigen Beispiel den Schlüssel HKEY_LOCAL_MACHINE oder den Schlüssel HKEY_USERS auswähle, und den Schlüssel schreiben möchte erhalte ich die Status-Meldung Fehler beim erstellen.
Bei den folgenden Key funktioniert das obige Beispiel korrekt: HKEY_CLASSES_ROOT, HKEY_CURRENT_USER sowie ebenfalfs bei dem Key HKEY_CURRENT_CONFIG
Bitte um Antwort woran der Fehler liegen kann!
Grüße
Gerhard
Kommentar von www.Molch-Entertainment.de.vu am 27.03.2005 um 18:29
Den Taskmanager (sogar von Win XP) kann man so sperren:
App.TaskVisible = False mit App.TaskVisible = True macht man das Programm wieder sichtbar.
Kommentar von frank kothe am 09.09.2004 um 16:11
hello,
leider bekomme beim beispiel-projekt (Project1.vbp)immer negative werte (winxp-prof).
ob ich einen vorhandenen reg schlüssel suche, oder einen schreiben möchte, nichts geht.
vielleicht habe ich den pfad zum schlüssel falsch eingetragen?!?
bisher versucht (Schlüssel vorhanden?):
HKEY_LOCAL_MACHINE/SOFTWARE/Testy/TestWert (fehler)
/SOFTWARE/Testy/TestWert (fehler)
SOFTWARE/Testy/TestWert (fehler)
/Testy/TestWert (fehler)
Testy/TestWert (fehler)
/TestWert (fehler)
TestWert (fehler)
Kommentar von Reinhard Coerdt am 18.08.2004 um 14:33
Hallo,
möchte gerne die Registry nach einem bestimmten Key oder einem vorgegebenen Wert durchsuchen. Hat jemand dazu den Code.
Danke
Kommentar von am 09.04.2004 um 23:08
mühl
Kommentar von Christian am 08.03.2004 um 14:27
Moin Moin,
ich schreibe in VB ein Programm zur Zugriffssteuerung. Folglich darf es nicht beendet werden. Kann mir jemand sagen, wie ich per button den Taskmanager sperren kann? ich bekomme keine unterordner erstellt...
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableTaskMgr
Das müsste angelegt werden.
Ich wäre dankbar, wenn mir jemand helfen kann.
Besser wär es natürlich, wenn ich das Programm gar nicht erst im Taskmanager sehen würde, aber ich glaube das kann man gar nicht unter 2000 einrichten, oder?
Grüße
Christain
Kommentar von Stefan Payer am 17.02.2004 um 10:31
Vermisse an dem Beispiel die Sicherheitseinstellungen. RegSetKeySecurity kann die Sicherheitseinstellungen in der Registry setzen. Würde gerne mehr über diese Funktionen erfahren.
Greets
Kommentar von Jürgen Mildes am 06.08.2003 um 14:54
Der Quellcode ist ok. (win2000) Allerdings muß ich zum Beispiel aus der Registry den Standort von Dateien auslesen. z.B. in welchem Verzeichnis liegt die win.ini
könnte mir da jemand mal den Quellcode geben? (VB6.0)Bitte mit Hinweis aus evtl. notwendige Verweise.
Kommentar von Danny am 03.04.2003 um 18:00
Hallo! kann mir mal bitte jemand dem code zum löschen von dem schlüssel "key" in
Hkey_Local_Machine/Software/Microsoft/Windows/CurrentVersion/Policies/Ratings
schreiben? wäre sehr dankbar!
Kommentar von Jochen am 05.03.2003 um 11:29
Könntet ihr vielleicht mal so gütig sein und dazuschreiben, welche Objekte man in sein Formular einfügen muss und wie diese anzuordnen sind????
Kommentar von Alex Storny am 01.03.2003 um 19:02
Ich habe lange nach einer Funktion gesucht, die unter Win 2000/XP einen Registry-Schlüssel mitsamt allen Unterschlüsseln löschen kann. RegDeleteKey (Tipp107) schafft dies leider nur unter Win9x und ME. Besser erledigt dies die Funktion SHDeleteKey:
Option Explicit
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" _
Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal _
lpSubKey As String, ByVal ulOptions As Long, ByVal _
samDesired As Long, phkResult As Long) As Long
Private Declare Function SHDeleteKey Lib "shlwapi.dll" Alias "SHDeleteKeyA" _
(ByVal hKey As Long, ByVal pszSubKey As String) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long
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
Const HKEY_DYN_DATA = &H80000006
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_CREATE_LINK = &H20
Const KEY_READ = KEY_QUERY_VALUE Or _
KEY_ENUMERATE_SUB_KEYS _
Or KEY_NOTIFY
Const KEY_ALL_ACCESS = KEY_QUERY_VALUE Or _
KEY_SET_VALUE Or _
KEY_CREATE_SUB_KEY Or _
KEY_ENUMERATE_SUB_KEYS Or _
KEY_NOTIFY Or _
KEY_CREATE_LINK
Const ERROR_SUCCESS = 0&
Public Function DeleteAllKeys(lRootKey As Long, sKeyPath As String, sKeyName As String) As Long
Dim lRetVal As Long
Dim hKey As Long
lRetVal = RegOpenKeyEx(lRootKey, sKeyPath + Chr$(0), 0, KEY_ALL_ACCESS, hKey)
lRetVal = SHDeleteKey(hKey, sKeyName + Chr$(0))
'Nur für WIN9x
'lRetVal = RegDeleteKey(hKey, sKeyName + Chr$(0))
RegCloseKey (hKey)
DeleteAllKeys = lRetVal
End Function
Private Sub Command1_Click()
Dim lRetVal As Long
'Löscht alle Schlüssel der Dateiverknüpfung ".jpg"
lRetVal = DeleteAllKeys(HKEY_LOCAL_MACHINE, "Software\Classes", ".jpg")
If lRetVal = ERROR_SUCCESS Then
MsgBox "Alle Schlüssel wurden gelöscht!!"
End If
End Sub
Kommentar von Daniel am 30.01.2003 um 11:33
Ich will "Nur" Werte aus dem Schlüssel
[HKEY_CURRENT_USER\Software\Adlon]
auslesen und dann einzeln in Textboxen Verteilen, wie stelle ich das an, da ich von VBA noch überhaupt fast gar nix verstehe...
Ich wäre über ne detailierte (für mich verständliche ;] ) Antwort sehr dankbar.
Kommentar von BerndBerger am 27.08.2002 um 14:50
Wie kann ich die Registry eines anderen PC´s im Netzwerk lesen bzw. ändern? Danke bereits im voraus...
Kommentar von Schü am 23.07.2002 um 15:32
Achtung!
Unter NT/XP muß der Aufruf beim Setzen eines Wertes zuvor so aussehen, glaube ich:
Result = RegOpenKeyEx(Root, Key, 0, KEY_SET_VALUE, hKey)
Kommentar von zic am 21.07.2002 um 00:34
Hallo,
wenn ich nun einen String Wert auslese wird er in label11 angezeigt.
Ich möchte aber gerne das noch ein wert von mir dahinter steht.
Ich würde also schreiben:
label11.caption = CStr(Value) & "Zusatz"
Warum funktioniert das nicht bzw. wird das ignoriert?
Kommentar von romanb am 25.04.2002 um 09:18
hallo,
suche einen weg alle einträge unter "hkey_current_user\software\" zu durchlaufen und anzuzeigen. das krieg ich nicht hin.
lesen und schreiben einzelner schlüssel is kein prob ..
VIELEN DANK FÜR DIE VIELEN UND HILFREICHEN ANTWORTEN IN VORAUS !!!
mfg
roman b.
Kommentar von Marc am 23.03.2002 um 17:27
Wie kann ich den Standardschlüssel veränder??? mit RegSetValueEx_Str(hKey, "(Standard)", 0, REG_SZ, s, Len(s) + 1) funktioniert das nicht. Es wird dann noch ein Schlüssel (Standard) angelegt. Wie kann ich dieses Prob umgehen??
Kommentar von xl am 22.03.2002 um 14:59
Hi!!
ich finde deine seite echt gut,aber ich bin bis jetzt (leider noch ) ein "fast-nix-checker" in sachen vb und vba...
kannst du mir bitte mal den code schicken, den ich eingeben muss, wenn ich einfach nur einen wert mit dem Namen "PDFFileName" in der Registry haben will??? bitte, bitte!!! ich hänge jetzt schon ewig an dieser sache, jetz kenn ich die lösung und weis nicht, wie ich sie hinkrieg... :-( wo und wie muss ich die Schlüssel und Sub-Schlüsselnamen eingeben???
VIELEN VIELEN DANK SCHONMAL IM VORRAUS!!!
mfg XL
Kommentar von JOJO am 11.03.2002 um 23:15
Gibt es eine Möglichkeit über die Registry einen relativ wirksamen
"Kopierschutz" zu verwirklichen?
Kommentar von Pess am 09.01.2002 um 11:41
Eine Frage. Ich kämpfe immer noch mit der Registry. Wie kann ich einen Wert in einem Schlüssel überprüfen, ob er existiert (z.B. String-Wert)? Dank im Voraus.
Kommentar von Ferdinand am 06.11.2001 um 12:58
versuchs mit Hex(Zahl)
Kommentar von Rob am 02.10.2001 um 03:21
Eine Frage vielleicht
eine dumme Frage aber
woher bekommst du die Hexadezimalen Wert die du den Constanten zuordnest, oder besser gesagt woher weißt du was für Werte du initialisieren mußt?
Kommentar von Rudi am 20.09.2001 um 14:02
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
bzw.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
Wert RegisteredOwner und RegisteredOrganization
durchsuche einfach die registry nach dem namen, auf den deine windows-kopie registriert ist...
Kommentar von Boban am 14.09.2001 um 20:36
Wie kann ich den User des PC auslesen. Z.B.
Lizenziert für:
Max Mustermann
Privat
Kommentar von Rolf.H am 30.08.2001 um 11:40
Ich möchte aus der Registry unter HKEY_CURRENT_USER ein Ordner beim Beenden von W2000 auslesen und beim einloggen wieder Einlesen.
Kann man soetwas unter VB umsetzen.
Ich bin kein Programmierer, deshalb
wäre ich über eine Detailierte Erklärung oder Lösung glücklich.
MfG
Rolf
Kommentar von Josi am 10.08.2001 um 14:11
Werden Strings irgendwie verändert, wenn sie mit obengenannten Prog inne Registry geschrieben werden? (evtl Länge oder sonstige Eigenschaften)
Habe nämlich das Problem:
Schreibe korrekt geprüften String in die Registry, lese ihn wieder und prüfe nochmal, ergebnis der letzten Prüfung: FALSCH! bitte, helft mir, werd schon fast wahnsinnig!
Kommentar von Radioactive Man am 14.07.2001 um 19:44
Ich weiss nicht, was icvh falsch gemacht habe, aber bei RegValueGet bekomme ich immer nur 0 zurück. Kann es daran liegen, dass verschiedene Variablen wie hKey und dwType gar nicht gesetzt werden?
Kommentar von sumatra am 05.07.2001 um 03:56
leute ich suche und suche.... ich brauch ne ocx + inf also ne cab als source eigenschaften.... reg oöffnen lesen schreiben schliesssen werteübertrag per javascript von nner html seite, wäre echt dankbar
Kommentar von Tino Houston am 15.06.2001 um 16:29
Hallo Leute!
Kann jemand mir sagen wie ich die Umschalt bzw. Tasten für das gesamte Betriebssysteme deaktivieren kann!Keine Deaktivierung des Keyboards, sondern einzelne Tasten!!!
Kommentar von Berti Becks am 30.05.2001 um 11:06
Kann es sein, daß sich manche Werte der Registry mit "RegValueSet" nicht verändern lassen?
Bei Win98 konnte ich z.B. nicht bei HKEY_CURRENT_USER,
AppEvents\Schemes\Apps\.Default\.Default\.Current den Wert ändern (Systemsounds). Auch bei dem Versuch den Wert zu löschen bekam ich immer als Ergebnis 0 zurück. Funktioniert die Funktion hier nicht oder gibt es einen Schreibschutz oder bin ich einfach zu doof?
Kommentar von zauberlehrling am 21.05.2001 um 13:49
Hallo!
Zum Auslesen aus der Registry hab ich mal eine kleine Frage:
Kann man die Größe der Festplattenpartitionen auch auslesen ? Gibt es eine Übersicht, welche wirklich wichtigen Hard- u. Softwaredaten explizit in der Registry vermerkt sind ? Danke schon im Vorraus für alle Antworten
Kommentar von Farid am 06.03.2001 um 10:23
Wie kann ich ein Script auf ein Remote Rechner im Netzwerk ausführen? Mit diesem Script will ich bestimmte Reg. Einträge verändern. Ich bin Administrator der Domöne und habe alle Rechte.
Kommentar von Thomas Decker am 12.12.2000 um 12:02
Es Kann kein Pfad direkt unter HKEY_LOCAL_MACHINE oder HKEY_USERS angelegt werden (Zumindest habe ich keine Lösung gefunden). Setzt man den Pfad unter HKEY_LOCAL_MACHINE anstatt auf Test-Ordner auf SOFTWARE/Test-Ordner funktioniert das Beispiel einwandfrei.
In der MSDN-Hilfe „Windows Base Services: Platform SDK“ wird auf diesen Umstand hingewiesen.
MfG
Thomas D.
Kommentar von micha-o am 30.10.2000 um 23:33
Warum funktioniert bei mir unter win2000 und unter winnt mit vb6 das erstellen eines schlüssels unter HKEY_LOCAL_MACHINE und HKEY_USERS nicht?