Seite 1 von 1

Windows- Registry

Verfasst: So, 15.05.2005 20:58
von moritz
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

Windows- Registry

Verfasst: Mo, 16.05.2005 11:26
von ykcim
Hi,

ich habe den Weg auch mal versucht und es nicht geschafft.

Schau mal in die Bibliothek ImportWizard, Modul API.
Vielleicht hilft Dir das weiter.

mfg
Michael

Registry

Verfasst: Mo, 16.05.2005 11:42
von moritz
Danke für Deine Antwort. Ich vermute einen Bug in OO 1.1.4. Ich wüßte nicht, was ich noch probieren sollte. Bei ähnlichen Zugriffen auf die Registry hatte ich keine Probleme, nur RegEnumKey macht Ärger.
Moritz

Lösung

Verfasst: Di, 17.05.2005 09:51
von moritz
lpSubkey muß in OO- Basic als Referenz übergeben werden, also:

Declare Function RegOpenKey Lib "advapi32.dll" _
Alias "RegOpenKeyA" (ByVal hKey As Long, _
lpSubKey As String, phkResult As Long) As Long
Logisch..
Moritz