Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
816to820
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
816to820
816to820
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

kompletten Registry-Key in Arbeitsblatt einlesen

kompletten Registry-Key in Arbeitsblatt einlesen
09.11.2006 15:14:30
Andreas
Hallo zusammen,
ich muss manchmal an einigen Arbeitsplätzen die Excel-Optionen kontrollieren. Um mir das Blättern im Registry-Editor (regedit) an jedem einzelnen Arbeitsplatz sparen zu können, wäre es toll, wenn ich mir alle Optionen des Keys
HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Excel\Options
in eine Arbeitsmappe einlesen könnte.
Hat evtl. jemand einen code parat?
Als ‚goodie’ wäre es prima, wenn der auch gleich den Inhalt eines Unter-Keys mit einlesen würde, wenn vorhanden.
(Für evtl. andere Einsatzfälle)
Schon mal vielen Dank
Andreas

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: kompletten Registry-Key in Arbeitsblatt einlesen
09.11.2006 18:31:36
Fritz
Hallo Andreas,
hier die Funktion.
Den Namen des Schlüssels musst Du noch anpassen
Gruß
Fritz
Option Explicit
Private Declare

Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" _
(ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, _
lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Any, _
lpcbData As Long) As Long
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 RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _
(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Const ERROR_NO_MORE_ITEMS = 259&
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&
Const REG_NONE = 0
Const REG_SZ = 1
Const REG_EXPAND_SZ = 2
Const REG_BINARY = 3
Const REG_DWORD = 4
Const REG_DWORD_LITTLE_ENDIAN = 4
Const REG_DWORD_BIG_ENDIAN = 5
Const REG_LINK = 6
Const REG_MULTI_SZ = 7
Const REG_OPTION_NON_VOLATILE = &H0
Dim Cnt As Long, sName As String, sData As String, Ret As Long, RetData As Long
Const BUFFER_SIZE As Long = 255
Dim hKey&, s$, l&, dwType&, Lng&, buffer$
Dim Namen() As String

Sub ReadReg()
Dim I&, result&
Ret = BUFFER_SIZE
If RegOpenKey(HKEY_CURRENT_USER, "Software\Microsoft\Office\11.0\Excel\Options", hKey) = 0 Then
'Create a buffer
sName = Space(BUFFER_SIZE)
'Enumerate the keys
result = (GetFields(HKEY_CURRENT_USER, "Software\Microsoft\Office\11.0\Excel\Options"))
RegCloseKey hKey
End If
End Sub


Function GetFields(RegRoot&, SubKey$)
Dim Feld
Dim I&
Dim Fieldname$
Dim result&
Cnt = 0
ReDim Namen(0)
While RegEnumValue(hKey, Cnt, sName, Ret, 0, ByVal 0&, ByVal sData, RetData) <> ERROR_NO_MORE_ITEMS
If RetData > 0 Then
Namen(Cnt) = Left(sName, Ret)
ReDim Preserve Namen(UBound(Namen) + 1)
End If
Cnt = Cnt + 1
sName = Space(BUFFER_SIZE)
sData = Space(BUFFER_SIZE)
Ret = BUFFER_SIZE
RetData = BUFFER_SIZE
Wend
For I = 0 To UBound(Namen)
Cells(I + 1, 1) = Namen(I) & " = " & RegValueGet(HKEY_CURRENT_USER, SubKey, Namen(I), Feld)
Next
End Function


Function RegValueGet(Root&, Key$, Field$, Value As Variant)
Dim result&
buffer = ""
'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_EXPAND_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 = Value
End Function

Anzeige
AW: kompletten Registry-Key in Arbeitsblatt einlesen
10.11.2006 06:56:58
Andreas
Guten Morgen Fritz,
hey, Du hast Dich ja echt richtig ins Zeug geworfen für mich. :-)
Dein code funktioniert super, muss ich mir mal in Ruhe reinziehen.
Vielen Dank, dafür !!!
Ist es möglich ihn noch so zu ergänzen, dass er eventuelle Unter-Keys gleich noch mit einliest? Kein muss, wäre aber schön.
Gruß aus dem saukalten Oberfranken
Andreas
AW: kompletten Registry-Key in Arbeitsblatt einlesen
10.11.2006 09:42:40
Fritz
Moin Andreas,
hier der Code zum einlesen der Sub-Keys.
Musst Du nur dem Code hinzufügen.
Viel Spaß und schöne Grüße aus dem sonnigen Bremen
Fritz
Private Declare

Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" _
(ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, _
lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, _
lpcbClass As Long, lpftLastWriteTime As Any) As Long

Sub ReadSubKeys()
Dim Result&
Result = GetSubKey(HKEY_CURRENT_USER, "Software\Microsoft")
End Sub

-------------------------------------------------------

Function GetSubKey(RegRoot&, SubKey$)
Dim Cnt As Long, sName As String, sData As String, Ret As Long, RetData As Long
Const BUFFER_SIZE As Long = 255
Ret = BUFFER_SIZE
If RegOpenKey(RegRoot, SubKey, hKey) = 0 Then
sName = Space(BUFFER_SIZE)
While RegEnumKeyEx(hKey, Cnt, sName, Ret, ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) <> ERROR_NO_MORE_ITEMS
MsgBox (Left$(sName, Ret))
Cnt = Cnt + 1
sName = Space(BUFFER_SIZE)
Ret = BUFFER_SIZE
Wend
RegCloseKey hKey
End If
End Function

Anzeige
AW: kompletten Registry-Key in Arbeitsblatt einlesen
10.11.2006 10:28:47
Andreas
Hi Fritz,
hier geht auch gerade die Sonne auf, ändert aber nix an den 3°C.
Habe deinen code zugefügt, bekomme aber nur ne Menge an Msgboxen aus deiner Function GetSubKey.
Die Tabelle füllt sich aber nicht.
Kannst Du mir bitte hier noch kurz in die Schuhe helfen?
Danke und Gruß
Andreas
AW: kompletten Registry-Key in Arbeitsblatt einlesen
10.11.2006 10:47:54
Fritz
Du musst anstatt der MsgBox eben die entsprechenden Zellen ansprechen.
z.B.
anstatt MsgBox (Left$(sName, Ret))
dann
Cells(Cnt + 1, 2) = (Left$(sName, Ret))
Gruß
fritz
AW: kompletten Registry-Key in Arbeitsblatt einlesen
10.11.2006 11:35:20
Andreas
Hi Fritz,
ich möchte Dich nicht mit meiner Unwissendheit nerven, aber ich brings nicht auf die Reihe.
Ich bringe es nur so hin, dass in Spalte A der direkte Inhalt des Keys steht,
in Spalte B werden die Unter-Keys aufgelistet aber nicht deren Inhalt.
Evtl. mache ich was falsch.
Könntest Du mir vielleicht den kompletten code reinstellen?
Wäre mir eine große Hilfe.
Danke vorab
Andreas (Luft: 5,3°C)
Anzeige
AW: kompletten Registry-Key in Arbeitsblatt einlesen
10.11.2006 12:38:29
Fritz
Hallo Andreas,
das ist auch das, was ich Dir gesendet habe. Die meisten Sub-Keys enthalten ebenfalls nur Sub-Keys und demzufolge werden keine Daten angezeigt.
Was genau möchtest Du denn haben?
Wenn Du die Werte eines Schlüssels inklusive aller Unterschlüssel und dann deren Werte,
muss man die Routinen, die ich Dir gesandt habe über eine, oder mehrere Schleifen abarbeiten.
Dies macht aber m.e. nur Sinn, wenn man nicht bei HkeyLocalmachine anfängt.
Wenn Du mir mitteilst, welchen Schlüssel incl. Unterschlüssel du haben möchtest, kann ich Dir den Code senden.
Gruß
Fritz
Anzeige
AW: kompletten Registry-Key in Arbeitsblatt einlesen
14.11.2006 15:23:35
Andreas
Hallo Fritz,
sorry, dass ich mich erst heute melde, bin erst seit eben wieder im Büro.
Hier eine mögliche Anwendung des codes, wie ich ihn mir vorstelle:
Ich verwende AddIns, die in der Registry lesen und schreiben.
Diese legen Unterschlüssel für User an, die sich das erste mal auf dem jeweiligen
Rechner anmelden. Hier werden dann userspezifische Einträge gemacht.
Ich möchte mir jetzt z.B. alle Einträge alle User in ein Arbeitsblatt einlesen.
D.h., da ich nicht weiß, welche User sich auf dem Rechner bereits angemeldet haben,
bräuchte ich die Leseroutine variabel.
Deinen code konnte ich selber nur so anpassen, dass er mir zwar die Einträge des Haupkeys
(HKEY_CURRENT_USER\Software\VB and VBA Program Settings) einliest, nicht aber die
Einträge in den Keys für die einzelnen User.
Wenn das aber nicht so einfach geht, ist es nicht so schlimm.
Gruß
Andreas
Anzeige

228 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige