Windows- Registry
Verfasst: So, 15.05.2005 20:58
Hallo, kann mir hier vielleicht jemand sagen, warum der folgende Code nicht funtioniert. Ich möchte Einträge aus der Registry auslesen. Der Pfad ist bekannt, aber nicht die einzelnen Unterverzeichnisse. Unter VBA funktioniert das Ganze, mit den kleinen Änderungen müßte es auch mit OO gehen. Es kommt keine Fehlermeldung, die Anzahl der Unterverzeichnisse wird richtig ermittelt. Das problem ist, daß RegEnumKey keinen String ausgibt.
Hat jemand einen Tip, ob man hier etwas ändern kann. Wie gesagt, unter VBA und Winword97 funktioniert es. Und mit ähnlichen Funktionen unter OO hatte ich auch kein Problem.
Moritz
Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" _
(ByVal hKey As Long, _
ByVal dwIndex As Long, _
ByVal lpName As String, _
ByVal cbName As Long) As Long
Declare Function RegOpenKey Lib "advapi32.dll" _
Alias "RegOpenKeyA" (ByVal hKey As Long, _
ByVal lpSubKey As String, phkResult As Long) As Long
sub test()
Dim i As Integer
Const HKEY_CURRENT_USER = &H80000001
Public Const ERROR_NONE = 0&
vkeys = GetAllKeys(HKEY_CURRENT_USER, "Console")
For i = LBound(vkeys) To UBound(vkeys)
MsgBox vkeys(i)
Next
End Sub
Public Function GetAllKeys(hKey As Long, _
strPath As String) As Variant
Dim lRegResult As Long
Dim lCounter As Long
Dim hCurKey As Long
Dim strBuffer As String
Dim lDataBufferSize As Long
Dim strNames() As String
Dim intZeroPos As Integer
lCounter = 1
lRegResult = RegOpenKey(hKey, strPath, hCurKey)
'MsgBox lRegResult
Do
lDataBufferSize = 255
strBuffer = String(lDataBufferSize, " ")
jetzt müßte strBuffer ein Unterverzeichnis (Schlüssel) enthalten, strBuffer bleibt aber leer
lRegResult = RegEnumKey(hCurKey, lCounter, strBuffer, lDataBufferSize)
If lRegResult = ERROR_NONE Then
ReDim Preserve strNames(lCounter) As String
intZeroPos = InStr(strBuffer, Chr$(0))
If intZeroPos > 0 Then
strNames(UBound(strNames())) = left$(strBuffer, intZeroPos - 1)
'MsgBox UBound(strNames)
Else
strNames(UBound(strNames())) = strBuffer
' MsgBox UBound(strNames)
End If
lCounter = lCounter + 1
Else
Exit Do
End If
Loop
GetAllKeys = strNames()
End Function
Hat jemand einen Tip, ob man hier etwas ändern kann. Wie gesagt, unter VBA und Winword97 funktioniert es. Und mit ähnlichen Funktionen unter OO hatte ich auch kein Problem.
Moritz
Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" _
(ByVal hKey As Long, _
ByVal dwIndex As Long, _
ByVal lpName As String, _
ByVal cbName As Long) As Long
Declare Function RegOpenKey Lib "advapi32.dll" _
Alias "RegOpenKeyA" (ByVal hKey As Long, _
ByVal lpSubKey As String, phkResult As Long) As Long
sub test()
Dim i As Integer
Const HKEY_CURRENT_USER = &H80000001
Public Const ERROR_NONE = 0&
vkeys = GetAllKeys(HKEY_CURRENT_USER, "Console")
For i = LBound(vkeys) To UBound(vkeys)
MsgBox vkeys(i)
Next
End Sub
Public Function GetAllKeys(hKey As Long, _
strPath As String) As Variant
Dim lRegResult As Long
Dim lCounter As Long
Dim hCurKey As Long
Dim strBuffer As String
Dim lDataBufferSize As Long
Dim strNames() As String
Dim intZeroPos As Integer
lCounter = 1
lRegResult = RegOpenKey(hKey, strPath, hCurKey)
'MsgBox lRegResult
Do
lDataBufferSize = 255
strBuffer = String(lDataBufferSize, " ")
jetzt müßte strBuffer ein Unterverzeichnis (Schlüssel) enthalten, strBuffer bleibt aber leer
lRegResult = RegEnumKey(hCurKey, lCounter, strBuffer, lDataBufferSize)
If lRegResult = ERROR_NONE Then
ReDim Preserve strNames(lCounter) As String
intZeroPos = InStr(strBuffer, Chr$(0))
If intZeroPos > 0 Then
strNames(UBound(strNames())) = left$(strBuffer, intZeroPos - 1)
'MsgBox UBound(strNames)
Else
strNames(UBound(strNames())) = strBuffer
' MsgBox UBound(strNames)
End If
lCounter = lCounter + 1
Else
Exit Do
End If
Loop
GetAllKeys = strNames()
End Function