Hi Claus,
ich hab' mich eben mal hingesetzt und folgendes zusammengetragen
<code>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 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 Byte, _
lpcbData 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 Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_CONFIG = &H80000005
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const KEY_QUERY_VALUE = &H1
Const REG_SZ = 1
Const ERROR_SUCCESS = 0
Private Sub Command1_Click()
Dim sValues() As String
Dim I As Integer
sValues = Reg_GetAllKeys(HKEY_CURRENT_USER, _
"SoftwareMicrosoftWindowsCurrentVersionRun")
For I = 0 To UBound(sValues)
List1.AddItem sValues(I)
Next I
End Sub
Public Function Reg_GetAllKeys(ByVal hKey As Long, _
ByVal sFolder As String) As Variant
Dim sKeyName As String
Dim sBuffer As String
Dim bLen As Long
Dim lType As Long
Dim lHandle As Long
Dim lResult As Long
Dim nCount As Long
Dim tmp(0 To 254) As Byte
ReDim sValues(0) As String
lResult = RegOpenKeyEx(hKey, sFolder, 0&, _
KEY_QUERY_VALUE, lHandle)
If lResult = ERROR_SUCCESS Then
nCount = 0
Do
sKeyName = Space(255)
lResult = RegEnumValue(lHandle, nCount, sKeyName, _
Len(sKeyName), 0&, 0&, tmp(0), 256)
If lResult <> ERROR_SUCCESS Then Exit Do
<font color=green>' Schlüsselname</font>
ReDim Preserve sValues(nCount)
sKeyName = Left$(sKeyName, InStr(sKeyName, _
vbNullChar) - 1)
<font color=green>' Wert des Schlüssels</font>
sBuffer = Space$(255)
bLen = Len(sBuffer)
lType = REG_SZ
lResult = RegQueryValueEx(lHandle, sKeyName, 0&, _
lType, ByVal sBuffer, bLen)
If lResult = ERROR_SUCCESS Then
sBuffer = Left$(sBuffer, bLen)
While Right$(sBuffer, 1) = Chr$(0)
sBuffer = Left$(sBuffer, Len(sBuffer) - 1)
Wend
Else
sBuffer = ""
End If
sValues(nCount) = sKeyName + ";" + sBuffer
nCount = nCount + 1
Loop
RegCloseKey lHandle
End If
Reg_GetAllKeys = sValues
End Function</code> Um das Beispiel auszuprobieren, plaziere auf eine Form ein CommandButton (Command1) und eine ListBox (List1). Dann noch obigen Code einfügen und STARTEN. Das Beispiel listet alle Schlüsselnamen und Werte des Zweigs RUN in SoftwareMicrosoftWindowsCurrentversion auf.
Cu
Dieter |