Seite 1 von 1

Registry Auflisten!

Verfasst: 09.09.2006 23:20
von al90
Hi,

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
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. :wink: