Listet den Inhalt der Registry (SubKey-Namen) auf. Dabei kann bei jedem beliebigen sKeyNamen gestartet werden.
Code: Alles auswählen
; German forum: http://www.purebasic.fr/german/viewtopic.php?t=9882
; Author: AL90
; Date: 09.09.2006
; OS: Windows XP
; Demo: Nein
; ListRegistry Example. (PureBasic 4.00 version)
; ----------------------------------------------
;
; Listet alle SubKeyNamen ab den angegebenen 'StartKeyNamen' auf.
; (Routine benötigt dazu die ListSubKey() Funktion aus dem C.A.V. {Hier enthalten} )
;
; Somit kann ListRegistry() u.a. dazu benutzt werden, einen eigenen
; Such-Algorythmus zu Programmieren.
Procedure.s ListSubKey(topKey.l, sKeyName.s, Index.l, ComputerName.s)
GetHandle.l
hKey.l
dwIndex.l
lpName.s
lpcbName.l
lpftLastWriteTime.FILETIME
i.l
lReturnCode.l
lhRemoteRegistry.l
ListSubKey.s
If Left(sKeyName, 1) = "\"
sKeyName = Right(sKeyName, Len(sKeyName) - 1)
EndIf
If ComputerName = ""
GetHandle = RegOpenKeyEx_(topKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
Else
lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
GetHandle = RegOpenKeyEx_(lhRemoteRegistry, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
EndIf
If GetHandle = #ERROR_SUCCESS
lpcbName = 255
lpName = Space(255)
GetHandle = RegEnumKeyEx_(hKey, Index, @lpName, @lpcbName, 0, 0, 0, @lpftLastWriteTime)
If GetHandle = #ERROR_SUCCESS
ListSubKey = Left(lpName, lpcbName)
Else
ListSubKey = ""
EndIf
EndIf
RegCloseKey_(hKey)
ProcedureReturn ListSubKey
EndProcedure
; ------ Beispiel: sum = ListRegistry(#HKEY_LOCAL_MACHINE,"SOFTWARE\")
Procedure.l ListRegistry(topKey.l,StartKeyName$)
Shared summe.l
Protected Index.l = 0
Repeat
tst$=ListSubKey(topKey,StartKeyName$,Index,"")
If tst$
summe+1 : Index+1
While WindowEvent():Wend
AddGadgetItem(0, -1, StartKeyName$+tst$+"\")
ListRegistry(topKey,StartKeyName$+tst$+"\")
EndIf
Until tst$=""
ProcedureReturn summe
EndProcedure
; --------------- Main ------------------
OpenWindow(0, 0, 0, 500, 395, "ListRegistry Example!", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
ListViewGadget(0, 0, 0, 500, 395)
anzahl=ListRegistry(#HKEY_LOCAL_MACHINE,"SOFTWARE\")
MessageRequester("Info", "Auflistung Abgeschlossen!"+Chr(10)+"Anzahl der SubKeyNamen: "+Str(anzahl),#MB_OK|#MB_ICONINFORMATION)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
CloseWindow(0)
End
Das liegt allerdings an dem langsamen ListView. Bei einem Test mit Arrays brauchte die Routine gerade mal 2-3 Sekunden.
