PDA

Vollständige Version anzeigen : Einfacher Zugriff auf die Registry


Stefan Kulpa
15.01.2003, 18:06
Neben der Nutzung des Win32-API besteht noch die Möglichkeit, das Windows Scripting Host (WSH) für Zugriffe auf die Registry zu nutzen.

Weniger bekannt ist die Möglichkeit, eine kleine DLL von Microsoft zu nutzen, die 40 KB "große" regobj.dll.
Es handelt sich dabei um einen ActiveX-Server, dessen Funktionalität nach dem Setzen eines entsprechenden Verweises sofort zur Verfügung stehen.
Mitgeliefert wird noch eine Microsoft Word Datei mit der Beschreibung und einigen Beispielen (alles wiedermal in Englisch...).

Microsoft bieten dieses Download auf folgender Seite an:

Add-In and Component Downloads (http://msdn.microsoft.com/vbasic/downloads/addins/default.asp) (dort: RegObj.dll - ActiveX Manipulation of the Registry).

oder direkt: Die Setup-Datei RegObji.exe(169 KB) (http://download.microsoft.com/download/vb60pro/Update/6.0/W9X2K/EN-US/RegObji.exe).

Obwohl diese ActiveX-DLL vom 25. Juni 1997 stammt, funktioniert sie einwandfrei (getestet unter WXP SP1, VB6 SP5).

Der ActiveX-Server bietet verschiedene Methoden und Objekte an, um Schlüssel, Unterschlüssel und Werte zu erstellen, zu suchen, zu ändern und zu löschen.

Einzige Voraussetzung: man sollte schon mit dem Aufbau der Registry vertraut sein und natürlich bei allen Zugriffen auf die Registry Vorsicht walten lassen (aber das weiss ja jeder...):

Nachfolgend zwei simple Beispiel zur Nutzung des ActiveX-Servers:


<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Option</span> <span class="TOKEN">Explicit</span>
<span class="REM">'// ---------------------------------------------------------------------------------</span>
<span class="REM">'// Beispielcode zur Nutzung der regobj.dll (vom 25. Juni 1997!)</span>
<span class="REM">'// Microsoft Registration Manipulation Classes</span>
<span class="REM">'// ---------------------------------------------------------------------------------</span>
&nbsp;
<span class="TOKEN">Sub</span> Beispiel01()
<span class="REM">'// ---------------------------------------------------------------------------------</span>
<span class="REM">'// Alle Unterschl&uuml;ssel unterhalb von HKEY_CLASSES_ROOT\CLSID auflisten!</span>
<span class="REM">'// ---------------------------------------------------------------------------------</span>
<span class="TOKEN">Dim</span> objSubKey <span class="TOKEN">As</span> RegKey
<span class="TOKEN">Dim</span> objRegKey <span class="TOKEN">As</span> RegKey
<span class="TOKEN">Set</span> objRegKey = RegKeyFromString(&quot;\HKEY_CLASSES_ROOT\CLSID&quot;)
&nbsp;
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> objSubKey <span class="TOKEN">In</span> objRegKey.SubKeys
<span class="TOKEN">Debug.Print</span> objSubKey.Name
<span class="TOKEN">Next</span> objSubKey
<span class="TOKEN">Debug.Print</span> objRegKey.SubKeys.Count &amp; &quot; Eintr&auml;ge gefunden!&quot;
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>
&nbsp;
<span class="TOKEN">Sub</span> Beispiel02()
&nbsp;
<span class="TOKEN">On Error GoTo</span> Err_Beispiel02
&nbsp;
<span class="TOKEN">Const</span> csMYSUBKEY <span class="TOKEN">As</span> <span class="TOKEN">String</span> = &quot;EIC Tools&quot;
<span class="TOKEN">Dim</span> objValue <span class="TOKEN">As</span> RegValue
<span class="TOKEN">Dim</span> objNewKey <span class="TOKEN">As</span> RegKey
<span class="TOKEN">Dim</span> objRootKey <span class="TOKEN">As</span> RegKey
<span class="REM">'// ---------------------------------------------------------------------------------</span>
<span class="REM">'// Programm eigene Daten speichern, lesen und wieder l&ouml;schen</span>
<span class="REM">'// ---------------------------------------------------------------------------------</span>
<span class="TOKEN">Set</span> objRootKey = RegKeyFromString(&quot;\HKEY_CURRENT_USER\Software&quot;)
<span class="REM">'// ---------------------------------------------------------------------------------</span>
<span class="REM">'// Neuen Schl&uuml;ssel unterhalb von \HKEY_CURRENT_USER\Software anlegen</span>
<span class="REM">'// ---------------------------------------------------------------------------------</span>
objRootKey.SubKeys.Add csMYSUBKEY
<span class="TOKEN">Set</span> objNewKey = objRootKey.SubKeys(csMYSUBKEY)
<span class="REM">'// ---------------------------------------------------------------------------------</span>
<span class="REM">'// Werte unterhalb des neuen Schl&uuml;ssel anlegen</span>
<span class="REM">'// ---------------------------------------------------------------------------------</span>
objNewKey.Values.Add vbNullString, &quot;Default-Wert&quot;, RegValueType.rvString
objNewKey.Values.Add &quot;Werte1&quot;, &quot;Wert1&quot;, RegValueType.rvString
objNewKey.Values.Add &quot;Werte2&quot;, 12345, RegValueType.rvLong
<span class="REM">'// ---------------------------------------------------------------------------------</span>
<span class="REM">'// Jetzt die Werte wieder auslesen</span>
<span class="REM">'// ---------------------------------------------------------------------------------</span>
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> objValue <span class="TOKEN">In</span> objNewKey.Values
<span class="TOKEN">With</span> objValue
<span class="TOKEN">Debug.Print</span> &quot;Name: &quot;; .Name; &quot; Typ: &quot;; .Type; &quot; Wert: &quot;; .Value
<span class="TOKEN">End</span> <span class="TOKEN">With</span>
<span class="TOKEN">Next</span>
<span class="REM">'// ---------------------------------------------------------------------------------</span>
<span class="REM">'// Jetzt die Werte einzeln wieder l&ouml;schen</span>
<span class="REM">'// ---------------------------------------------------------------------------------</span>
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> objValue <span class="TOKEN">In</span> objNewKey.Values
objNewKey.Values.Remove objValue.Name
<span class="TOKEN">Next</span>
<span class="REM">'// ---------------------------------------------------------------------------------</span>
<span class="REM">'// Und zuletzt den Unterschl&uuml;ssel selbst entfernen</span>
<span class="REM">'// ---------------------------------------------------------------------------------</span>
objRootKey.SubKeys.Remove csMYSUBKEY
&nbsp;
<span class="TOKEN">Exit Sub</span>
&nbsp;
Err_Beispiel02:
MsgBox &quot;Fehler #&quot; &amp; Err.Number &amp; vbCrLf &amp; Err.Description, vbExclamation
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

Viel Spaß beim ausprobieren!

Sascha Trowitzsch
15.01.2003, 22:10
Einfach prima, was andere immer wieder für einen finde... :10points:

Joachim Hofmann
11.06.2003, 14:26
Die "Fußgänger" können für anwendungsinterne Einstellungen auch die eingebauten VB(A)-Funktionen GetSetting, SaveSetting, DeleteSetting und GetAllSettings benutzen.

(Unästhetisch dabei: Sie tragen die Schlüssel unter "...\Software\VB and VBA Program Settings\&lt;hier folgt erst die Anwendung selbst&gt;..." ein.)