Windows- Registry

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

moritz
*****
Beiträge: 216
Registriert: Mi, 20.10.2004 20:54

Windows- Registry

Beitrag 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
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Windows- Registry

Beitrag 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
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
moritz
*****
Beiträge: 216
Registriert: Mi, 20.10.2004 20:54

Registry

Beitrag 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
moritz
*****
Beiträge: 216
Registriert: Mi, 20.10.2004 20:54

Lösung

Beitrag 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
Antworten