API/VBA-Zugriff auf die Registrierungsdatenbank
Wie Sie sich erinnern, besteht die »Registry« aus einer Baumstruktur von Schlüsseln (Keys), in denen ein-
zelne Werte (Values) gespeichert werden können. Dass der Vergleich mit einem Verzeichnisbaum gar nicht
so abwegig ist, sollen die folgenden Eigenschaften zeigen:
Eigenschaft Beschreibung
Name Ein String für den Zugriff auf den Schlüssel. Es muss sich um einen eindeutigen Namen handeln, auf der gleichen
Baumebene darf es keine gleichnamigen Schlüssel geben. Der Bezeichner darf keine Backslash- (\) oder Null-
Zeichen enthalten, Leerzeichen sind erlaubt.
Class Der Objekt-Klassenname wird im Normalfall nicht genutzt und ist deshalb optional.
Security Descriptor Unter Windows NT können Security Descriptors verwendet werden, mit denen der Zugriff auf diesen Schlüssel
geregelt wird. Diese Eigenschaft ist optional.
Last write time Eine Zeitmarke, die über die letzte Änderung informiert.
Value(s) Null oder mehr Einträge, die unter diesem Schlüssel gespeichert werden. Nähere Details zu den Einträgen
entnehmen Sie bitte der folgenden Tabelle.
Tabelle 11.7 Eigenschaften von Schlüsseln
Der einzelne Eintrag unter einem Schlüssel besteht wiederum aus mehreren Teilen, die Sie der folgenden
Tabelle entnehmen können:
Teil Beschreibung
Name Bezeichner, über den der Feldwert identifiziert wird. Der Name kann bis zu 32.767 Unicode-Zeichen (65.534 Bytes)
enthalten, Backslash- (\) und Null-Zeichen sind zulässig.
Type Definiert den Datentyp. In Windows 3.1 handelte es sich immer um REG_SZ, d.h. nullterminierte Strings.
Verwenden Sie nur die vordefinierten Datentypen, damit Änderungen mit dem Registriereditor problemlos
möglich sind.
Data Die eigentlichen Daten. Es lassen sich maximal 1 MByte speichern, Sie sollten sich jedoch darauf beschränken,
nur die unbedingt nötigen Informationen in der Registrierdatenbank abzulegen. Eine weitere Möglichkeit besteht
darin, nur einen Verweis auf die eigentlichen Daten zu speichern. Diese befinden sich dann in einer eigenen Datei.
Tabelle 11.8 Teile eines Registry-Eintrags
API-Konstanten/Funktionen für den Registry-Zugriff
Die Konstanten:
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
ermöglichen uns den Zugriff auf die einzelnen Teilbäume.
Public Const KEY_QUERY_VALUE = &H1
Public Const KEY_SET_VALUE = &H2
Public Const KEY_CREATE_SUB_KEY = &H4
Public Const KEY_ENUMERATE_SUB_KEYS = &H8
Public Const KEY_NOTIFY = &H10
711
Die Registrierdatenbank
Kapitel 11: Dateien und Verzeichnisse
Public Const KEY_CREATE_LINK = &H20
Public Const KEY_READ = KEY_QUERY_VALUE Or _
KEY_ENUMERATE_SUB_KEYS Or _
KEY_NOTIFY
Public Const KEY_WRITE = KEY_SET_VALUE Or _
KEY_CREATE_SUB_KEY
Public Const KEY_EXECUTE = KEY_READ
Public 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
Public Const ERROR_SUCCESS = 0&
Public Const REG_NONE = 0
Public Const REG_SZ = 1
Public Const REG_DWORD = 4
Public Const REG_OPTION_NON_VOLATILE = &H0
Public Const REG_CREATED_NEW_KEY = &H1
Wundern Sie sich nicht über die obigen Deklarationen, in der
Win32api.txt
sind leider nicht alle Konstanten
enthalten, die Werte stammen direkt aus einer C-Header-Datei (WINNT.H).
Sollten Sie die folgenden Deklarationen mit denen in der
Win32api.txt
vergleichen, werden Sie feststellen,
dass einige Änderungen vorgenommen wurden. Statt umständlicher Typdeklarationen übergeben wir in
vielen Fällen einfach einen NULL-Pointer (0& As Any):
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
Die Funktion
RegOpenKeyEx
öffnet einen Schlüssel für die Bearbeitung. Der Befehl:
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
schließt den Schlüssel nach der Bearbeitung. Die Anweisung:
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
liest einen Wert ein (der zugehörige Schlüssel muss bereits geöffnet sein). Der Befehl:
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
erzeugt einen Schlüssel. Existiert dieser bereits, werden Sie über
phkResult
darauf aufmerksam gemacht. Die
Deklaration:
Declare Function RegFlushKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
erzwingt das Schreiben eines neu erstellen Schlüssels.
Die folgenden beiden Prozeduren sind eigentlich eine. Für die Übergabe des
lpData
-Wertes müssen wir die
Deklaration für Strings und Long-Werte entsprechend anpassen (die Funktion erwartet einen Zeiger auf
712

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.