====== Registry ====== ===== 1. mit FF-Befehlen ===== Die Befehle **FF_WriteProfile** und **FF_GetProfile** schreiben bzw. lesen (nur!) im Registry-Pfad //HKEY_CURRENT_USER\Software\Joachim Koopmann Software\FixFoto\Script\.// Der Befehl **FF_DeleteProfile** löscht einzelne Schlüssel oder die gesamte Sektion//.//\\ \\ ==== Schreiben und Lesen ==== RegSection = "DemoScript" FF_WriteProfile RegSection,"Key", "Wert des Schlüssels" ' Wert schreiben Variable = FF_GetProfile(RegSection,"Key") ' Wert lesen ==== Löschen ==== RegSection = "DemoScript" FF_WriteProfile RegSection,"Key", "Wert des Schlüssels" ' Wert schreiben FF_DeleteProfile RegSection,"Key" ' löscht einen Schlüssel (ab 3.10 B41) FF_DeleteProfile RegSection,"" ' löscht die gesamte Sektion (ab 3.10 B41) Wird der letzte verbliebene Schlüssel gelöscht, so erfolgt zugleich auch die Löschung der Sektion.\\ \\ ==== Boolsche Werte ==== **True** wird in der Registry als **"-1"** gespeichert.\\ **False** wird der Registry als **"0"** gespeichert.\\ \\ ===== 2. mit Mitteln des Betriebssystems ===== Die Registry kann auch mit Hilfe des **WshShell-Object** (Windows Script Host) oder der **Windows Management Instrumentation ([[http://de.wikipedia.org/wiki/Windows_Management_Instrumentation|WMI]])** manipuliert werden.\\ \\ ==== Erstellen, Verändern, Löschen ==== [[http://www.source-center.de/forum/showthread.php?758-Erstellen-L%F6schen-Editieren-%DCberpr%FCfen-von-Registrierungsschl%FCsseln|Quelle]] \\ Dim WSHShell Set WSHShell = CreateObject("WScript.Shell") WSHShell.Popup "Erstellt Key HKCU\MyRegKey mit Wert 'Top level key'" WSHShell.RegWrite "HKCU\MyRegKey\", "Top level key" WSHShell.Popup "Erstellt Key HKCU\MyRegKey\Entry mit Wert 'Second level key'" WSHShell.RegWrite "HKCU\MyRegKey\Entry\", "Second level key" WSHShell.Popup "Wert HKCU\MyRegKey\Value auf REG_SZ 1 setzen" WSHShell.RegWrite "HKCU\MyRegKey\Value", 1 WSHShell.Popup "Wert HKCU\MyRegKey\Entry auf REG_DWORD 2 setzen" WSHShell.RegWrite "HKCU\MyRegKey\Entry", 2, "REG_DWORD" WSHShell.Popup "Wert HKCU\MyRegKey\Entry\Value1 auf REG_BINARY 3 setzen" WSHShell.RegWrite "HKCU\MyRegKey\Entry\Value1", 3, "REG_BINARY" WSHShell.Popup "Löscht Wert HKCU\MyRegKey\Entry\Value1" WSHShell.RegDelete "HKCU\MyRegKey\Entry\Value1" WSHShell.Popup "Löscht Key HKCU\MyRegKey\Entry" WSHShell.RegDelete "HKCU\MyRegKey\Entry\" WSHShell.Popup "Löscht Key HKCU\MyRegKey" WSHShell.RegDelete "HKCU\MyRegKey\" ==== Prüfen, ob Schlüssel existiert / Lesen ==== Function CheckRegKey(Key) ' prüft, ob ein bestimmter Schlüssel vorhanden ist ' z.B. "HKEY_CURRENT_USER\Software\Joachim Koopmann Software\FixFoto\Path" ' nicht geeignet für die Prüfung von Registryknoten Dim result Dim WSHShell Set WSHShell = CreateObject("WScript.Shell") On Error Resume Next result = WSHShell.RegRead(Key) If result = "" then CheckRegKey = false ' Schlüssel existiert nicht Else CheckRegKey = true ' Schlüssel existiert End If End Function ==== Löschen ==== ' Bsp.: Löschen einer Sektion (funktioniert nicht, wenn Unterzweige existieren) RegSchluessel = "\FF_ScaleAll\" ' wichtig ist das "\" am Ende TempS = "HKEY_CURRENT_USER\Software\Joachim Koopmann Software\FixFoto\Script" & RegSchluessel Set WshShell = CreateObject("WScript.Shell") WshShell.RegDelete(TempS) Sub DeleteKey(Rootkey, KeyPath) ' Zweige in der Registry löschen, einschließlich aller Unterzweige ' Autor: Thomas@Gartner-IT.net ' http://www.it-visions.de/foren/display_message.asp?mid=568 ' verwendet: WMI ' Rootkey bezeichnet den RootKey ' HKEY_CLASSES_ROOT = &H80000000 ' HKEY_CURRENT_USER = &H80000001 ' HKEY_LOCAL_MACHINE = &H80000002 ' HKEY_USERS = &H80000003 ' HKEY_CURRENT_CONFIG = &H80000005 ' HKEY_DYN_DATA = &H80000006 ' KeyPath bezeichnet den zu löschenden Zweig ' z.B. "Software\Joachim Koopmann Software\FixFoto\SaveState\Ansicht2" Dim objReg Set objReg = GetObject("winmgmts:\\.\root\default:StdRegProv") Dim ValueArray, Value ' Unterschlüssel auflisten objReg.EnumKey Rootkey, KeyPath, ValueArray If Not IsNull(ValueArray) Then For Each Value In ValueArray ' Rekursion starten DeleteKey Rootkey, KeyPath + "\" + Value Next End If ' Schlüssel löschen objReg.DeleteKey Rootkey, KeyPath + "\" + Value End Sub ==== Windows-Version ==== ' Windows-Version ermitteln Set WshShell = CreateObject("WScript.Shell") winversion = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName") ==== Prüfen, ob Knoten existiert ==== Function CheckRegNode (Rootkey, SubPath, Node) ' prüft, ob ein bestimmter Unterknoten in einem Registrypfad vorhanden ist ' GroßKleinSchreibung ist egal ' Rootkey bezeichnet den RootKey ' HKEY_CLASSES_ROOT = &H80000000 ' HKEY_CURRENT_USER = &H80000001 ' HKEY_LOCAL_MACHINE = &H80000002 ' HKEY_USERS = &H80000003 ' HKEY_CURRENT_CONFIG = &H80000005 ' Subpath bezeichnet den weiteren Pfad ' Bsp.: "Software\Joachim Koopmann Software\FixFoto" ' Node bezeichnet den zu prüfenden Knoten ' Bsp.: "Options" Dim objReg, i Dim arrSubKeys, strSubKey, strKeys Set objReg = GetObject("winmgmts://./root/default:StdRegProv") objReg.EnumKey Rootkey, SubPath, arrSubKeys CheckRegNode = False Node = UCase(Node) for i = 0 to UBound(arrSubKeys) -1 if UCase(arrSubKeys(i)) = Node then CheckRegNode = True next Set objReg = Nothing End Function ==== alle Knoten einer Ebene ermitteln ==== Function RegSubKeys (Rootkey, SubPath) ' liefert ein Array mit allen Unterknoten zu einem Registrypfad ' Rootkey bezeichnet den RootKey ' HKEY_CLASSES_ROOT = &H80000000 ' HKEY_CURRENT_USER = &H80000001 ' HKEY_LOCAL_MACHINE = &H80000002 ' HKEY_USERS = &H80000003 ' HKEY_CURRENT_CONFIG = &H80000005 ' Subpath bezeichnet den weiteren Pfad ' Bsp.: Software\Joachim Koopmann Software\FixFoto Dim objReg Dim arrSubKeys, strSubKey, strKeys Set objReg = GetObject("winmgmts://./root/default:StdRegProv") objReg.EnumKey Rootkey, SubPath, arrSubKeys RegSubKeys = arrSubKeys Set objReg = Nothing End Function ==== alle Schlüssel einer Ebene ermitteln ==== Function RegSubValues (Rootkey, SubPath) ' liefert ein Array mit allen Schlüsseln zu einem Registrypfad ' und dem Typ des jeweiligen Schlüssels ' Rootkey bezeichnet den RootKey ' HKEY_CLASSES_ROOT = &H80000000 ' HKEY_CURRENT_USER = &H80000001 ' HKEY_LOCAL_MACHINE = &H80000002 ' HKEY_USERS = &H80000003 ' HKEY_CURRENT_CONFIG = &H80000005 ' Subpath bezeichnet den weiteren Pfad ' Bsp.: Software\Joachim Koopmann Software\Text Dim oReg Dim arrValueNames, arrValueTypes Dim i, sammelarr() Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") oReg.EnumValues Rootkey, SubPath, arrValueNames, arrValueTypes ReDim sammelarr (UBound(arrValueNames),1) For i=0 To UBound(arrValueNames) sammelarr(i,0) = arrValueNames(I) Select Case arrValueTypes(I) Case 1 sammelarr(i,1) = "String" Case 2 sammelarr(i,1) = "Expanded String" Case 3 sammelarr(i,1) = "Binary" Case 4 sammelarr(i,1) = "DWORD" Case 7 sammelarr(i,1) = "Multi String" End Select Next RegSubValues = sammelarr Set oReg = Nothing End Function weiteres Bsp.: [[/Boostskripte|Auslesen der FTP-Einstellungen]] von FF ===== 3. weiterführende Informationen ===== * [[http://www.wintotal.de/artikel/artikel-2004/7125.html]] * [[http://www.source-center.de/forum/showthread.php?758-Erstellen-L%F6schen-Editieren-%DCberpr%FCfen-von-Registrierungsschl%FCsseln]] * [[http://msdn.microsoft.com/en-us/library/windows/desktop/aa393664(v=VS.85).aspx]] zu Regedit: * [[http://www.winfaq.de/faq_html/Content/tip2000/onlinefaq.php?h=tip2045.htm]]