Registry Auflisten!
Verfasst: 09.09.2006 23:20
Hi,
Listet den Inhalt der Registry (SubKey-Namen) auf. Dabei kann bei jedem beliebigen sKeyNamen gestartet werden.
Wenn Ihr den StartKey bei "SOFTWARE\" belasst, kann die Auflistung u.U. einige Sekunden lang dauern. (Bei mir ca. 30 sek.)
Das liegt allerdings an dem langsamen ListView. Bei einem Test mit Arrays brauchte die Routine gerade mal 2-3 Sekunden.
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.
