Meine Rekursiv werke

  • Hallo Leute!

    Ich Poste meine Rekursiv werke ( Datein / Verzeichnise / Reg ) Listen!
    Vieleicht Kann sie wehr gebrauchen u. o einer hat noch vorschläge Ideen Erweiterungen! :D


    _Files_list_Rekursiv

    Spoiler anzeigen
    [autoit]

    ;#RequireAdmin
    #include-once
    #include <File.au3>
    #include <Array.au3>
    ;==============================================================================================================================#
    ;~ Function Name....: _FilesListRekursiv()
    ;
    ;~ Description......: Auflistung von Dateien
    ;
    ;~ $_a_Pfad_........: Pfad
    ;~ $_Set_Runde_.....: '1' ( Standart ) wie oft die Funktion aufgerufen wird ( beispiel C:\ & D:\ durchsuchen auf 2 setzen )
    ;~ $a_Wildcards_....: '*' ( Standart ) Suchbegrif u. o. Wildcards
    ;
    ;~ Return Value(s)..: Array ( Standard ) mit den gefundenen Dateien Array[0] endhält die anzahl ( Fund )
    ;
    ;~ Author(s)........: Kleiner27 (http://www.autoit.de) # 27.03.2010 09:00 #
    ;==============================================================================================================================#

    [/autoit] [autoit][/autoit] [autoit]

    Local $Runde_
    Local $a_Pfad_
    Local $_x_Files_
    Local $_x_Files_Next_
    Local $_U_ = 0x00000000
    Local $_a_A_Save_[0x000F423F]
    Local $_a_Zaehler_ = 0x00000001
    Local $_Tren_[0x00000003] = [Chr(0x00000020), Chr(0x0000002A), Chr(0x0000005C)]

    [/autoit] [autoit][/autoit] [autoit]

    Dim $iTimer = TimerInit()
    Dim $d = _FilesListRekursiv('E:', 0, '*')
    _ArrayDisplay($d, TimerDiff($iTimer))

    [/autoit] [autoit][/autoit] [autoit]

    Func _FilesListRekursiv($_a_Pfad_, $_Set_Runde_ = True, $a_Wildcards_ = True)
    If (StringRight($_a_Pfad_, 0x00000001) <> $_Tren_[0x00000002]) Then $_a_Pfad_ = ($_a_Pfad_ & $_Tren_[0x00000002])
    If ($_Set_Runde_ = $_Tren_[0x00000000] Or $_Set_Runde_ = 0x00000000) Then $_Set_Runde_ = (0x00000001)
    If ($a_Wildcards_ = $_Tren_[0x00000000]) Then $a_Wildcards_ = ($_Tren_[1])
    If ($_U_ < $Runde_) Then ReDim $_a_A_Save_[0x000F423F]
    $_U_ += 0x00000001
    _ShowFilesRekursiv($_a_Pfad_, $a_Wildcards_)
    $Runde_ = ($_U_)
    Switch ($Runde_)
    Case ($_Set_Runde_)
    ReDim $_a_A_Save_[$_a_Zaehler_]
    $_a_A_Save_[0x00000000] = ($_a_Zaehler_)
    $_a_Zaehler_ = 0x00000001
    $_U_ = 0x00000000
    Return ($_a_A_Save_)
    EndSwitch
    Return ($_a_A_Save_)
    EndFunc ;==>_FilesListRekursiv

    [/autoit] [autoit][/autoit] [autoit]

    Func _ShowFilesRekursiv($_a_Pfad_, $a_Wildcards_)
    $_x_Files_ = FileFindFirstFile($_a_Pfad_ & $a_Wildcards_)
    If ($_x_Files_ <> -0x00000001) Then
    Do
    $_x_Files_Next_ = FileFindNextFile($_x_Files_)
    If @error Then ExitLoop
    If (@extended = 0x00000001) Then ContinueLoop
    $_a_A_Save_[$_a_Zaehler_] = ($_a_Pfad_ & $_x_Files_Next_)
    $_a_Zaehler_ += 0x00000001
    Until False
    FileClose($_x_Files_)
    EndIf
    Dim $a_Verzeichnis_ = _FileListToArray($_a_Pfad_, $_Tren_[0x00000001], 0x00000002)
    For $_i_ = 0x00000001 To UBound($a_Verzeichnis_) - 0x00000001
    If (_File_Link_($_a_Pfad_ & $a_Verzeichnis_[$_i_]) = True) Then ContinueLoop
    _ShowFilesRekursiv(String($_a_Pfad_ & $a_Verzeichnis_[$_i_] & $_Tren_[0x00000002]), $a_Wildcards_)
    Next
    EndFunc ;==>_ShowFilesRekursiv

    [/autoit] [autoit][/autoit] [autoit]

    Func _File_Link_($_sF_Link_)
    Dim $_a_K_32_ = DllOpen('kernel32.dll')
    Dim $_D_Array_ = DllCall($_a_K_32_, 'dword', 'GetFileAttributesW', 'wstr', $_sF_Link_)
    If (@error) Then Return SetError(0x00000000, @error, 0x00000000)
    Return BitAND($_D_Array_[0x00000000], 0x00000400) = 0x00000400
    EndFunc ;==>_File_Link_

    [/autoit]


    _Folder_list_Rekursiv

    Spoiler anzeigen
    [autoit]

    ;#RequireAdmin
    #include-once
    #include <File.au3>
    #include <Array.au3>
    ;==============================================================================================================================#
    ;~ Function Name....: _FolderListRekursiv()
    ;
    ;~ Description......: Auflistung von Verzeichnise
    ;
    ;~ $_a_Pfad_........: Pfad
    ;~ $_Set_Runde_.....: '1' ( Standart ) wie oft die Funktion aufgerufen wird ( beispiel C:\ & D:\ durchsuchen auf 2 setzen )
    ;~ $a_Wildcards_....: '*' ( Standart ) Suchbegrif u. o. Wildcards
    ;
    ;~ Return Value(s)..: Array ( Standard ) mit den gefundenen Dateien Array[0] endhält die anzahl ( Fund )
    ;
    ;~ Author(s)........: Kleiner27 (http://www.autoit.de) # 27.03.2010 09:00 #
    ;==============================================================================================================================#

    [/autoit] [autoit][/autoit] [autoit]

    Local $Runde_
    Local $a_Pfad_
    Local $stringSplit
    Local $_U_ = 0x00000000
    Local $_a_A_Save_[0x000F423F]
    Local $_a_Zaehler_ = 0x00000001
    Local $_Tren_[0x00000004] = [Chr(0x00000020), Chr(0x0000002A), Chr(0x0000005C), Chr(46)]

    [/autoit] [autoit][/autoit] [autoit]

    Dim $iTimer = TimerInit()
    Dim $d = _FolderListRekursiv('D:', 0, '*')
    _ArrayDisplay($d, TimerDiff($iTimer))

    [/autoit] [autoit][/autoit] [autoit]

    Func _FolderListRekursiv($_a_Pfad_, $_Set_Runde_ = True, $a_Wildcards_ = True)
    If (StringRight($_a_Pfad_, 0x00000001) <> $_Tren_[0x00000002]) Then $_a_Pfad_ = ($_a_Pfad_ & $_Tren_[0x00000002])
    If ($_Set_Runde_ = $_Tren_[0x00000000] Or $_Set_Runde_ = 0x00000000) Then $_Set_Runde_ = (0x00000001)
    If ($a_Wildcards_ = $_Tren_[0x00000000]) Then $a_Wildcards_ = ($_Tren_[1])
    If ($_U_ < $Runde_) Then ReDim $_a_A_Save_[0x000F423F]
    $_U_ += 0x00000001
    _ShowFolderRekursiv($_a_Pfad_, $a_Wildcards_)
    $Runde_ = ($_U_)
    Switch ($Runde_)
    Case ($_Set_Runde_)
    ReDim $_a_A_Save_[$_a_Zaehler_]
    $_a_A_Save_[0x00000000] = ($_a_Zaehler_)
    $_a_Zaehler_ = 0x00000001
    $_U_ = 0x00000000
    Return ($_a_A_Save_)
    EndSwitch
    Return ($_a_A_Save_)
    EndFunc ;==>_FolderListRekursiv

    [/autoit] [autoit][/autoit] [autoit]

    Func _ShowFolderRekursiv($_a_Pfad_, $a_Wildcards_)
    If ($a_Wildcards_ <> $_Tren_[0x00000001]) Then
    $stringSplit = StringSplit($_a_Pfad_, $_Tren_[0x00000002])
    If (StringReplace(StringReplace($a_Wildcards_, $_Tren_[0x00000001], $_Tren_[0x00000000]), $_Tren_[0x00000003], $_Tren_[0x00000000]) = $stringSplit[UBound($stringSplit) - 2]) Then
    $_a_A_Save_[$_a_Zaehler_] = ($_a_Pfad_)
    $_a_Zaehler_ += 0x00000001
    EndIf
    Else
    $_a_A_Save_[$_a_Zaehler_] = ($_a_Pfad_)
    $_a_Zaehler_ += 0x00000001
    EndIf
    Dim $a_Verzeichnis_ = _FileListToArray($_a_Pfad_, $_Tren_[0x00000001], 0x00000002)
    For $_i_ = 0x00000001 To UBound($a_Verzeichnis_) - 0x00000001
    If (_File_Link_($_a_Pfad_ & $a_Verzeichnis_[$_i_]) = True) Then ContinueLoop
    _ShowFolderRekursiv(String($_a_Pfad_ & $a_Verzeichnis_[$_i_] & $_Tren_[0x00000002]), $a_Wildcards_)
    Next
    EndFunc ;==>_ShowFolderRekursiv

    [/autoit] [autoit][/autoit] [autoit]

    Func _File_Link_($_sF_Link_)
    Dim $_a_K_32_ = DllOpen('kernel32.dll')
    Dim $_D_Array_ = DllCall($_a_K_32_, 'dword', 'GetFileAttributesW', 'wstr', $_sF_Link_)
    If (@error) Then Return SetError(0x00000000, @error, 0x00000000)
    Return BitAND($_D_Array_[0x00000000], 0x00000400) = 0x00000400
    EndFunc ;==>_File_Link_

    [/autoit]

    _Files_list_Rekursiv_Dubell

    Spoiler anzeigen
    [autoit]

    ;#RequireAdmin
    #include-once
    #include <Array.au3>
    #include <File.au3>
    #include <String.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;==============================================================================================================================#
    ;~ Function Name....: _File_List_Dubell()
    ;
    ;~ Description......: Auflistung von Dateien
    ;
    ;~ $_a_Pfad_........: Pfad
    ;~ $_Set_Runde_.....: '1' ( Standart ) wie oft die Funktion aufgerufen wird ( beispiel C:\ & D:\ durchsuchen auf 2 setzen )
    ;~ $a_Wildcards_....: '*' ( Standart ) Suchbegrif u. o. Wildcards
    ;
    ;~ Return Value(s)..: Array ( Standard ) mit den gefundenen Dateien Array[0] endhält die anzahl ( Fund )
    ;
    ;~ Author(s)........: Kleiner27 (http://www.autoit.de) # 27.03.2010 09:00 #
    ;==============================================================================================================================#

    [/autoit] [autoit][/autoit] [autoit]

    Local $_U_
    Local $Runde_
    Local $_a_S_Save_
    Local $_a_X_File_
    Local $_a_X_File_Next_
    Local $_0_ = 0x00000000
    Local $_1_ = 0x00000000
    Local $_a_A_ArraySave_[0x000F423F][0x0000002]
    Local $_a_B_ArraySave_[0x000F423F][0x0000002]
    Local $_a_Tren_[0x00000004] = [Chr(0x00000020), Chr(0x0000002A), Chr(0x0000005C), Chr(0x0000007C)]

    [/autoit] [autoit][/autoit] [autoit]

    Dim $iTimer = TimerInit()
    Dim $F = _File_List_Dubell('D:', 0, '*')
    _ArrayDisplay($F, TimerDiff($iTimer))

    [/autoit] [autoit][/autoit] [autoit]

    Func _File_List_Dubell($a_Pfad_, $_Set_Runde_ = True, $a_Wildcards_ = True)
    If (StringRight($a_Pfad_, 0x00000001) <> $_a_Tren_[0x00000002]) Then $a_Pfad_ = ($a_Pfad_ & $_a_Tren_[0x00000002])
    If ($_Set_Runde_ = $_a_Tren_[0x00000000] Or $_Set_Runde_ = 0x00000000) Then $_Set_Runde_ = (0x00000001)
    If ($a_Wildcards_ = $_a_Tren_[0x00000000]) Then $a_Wildcards_ = ($_a_Tren_[1])
    If ($_U_ < $Runde_) Then
    ReDim $_a_B_ArraySave_[0x000F423F][0x00000002]
    ReDim $_a_A_ArraySave_[0x000F423F][0x00000002]
    EndIf
    $_U_ += 0x00000001
    _Show_Dubell_($a_Pfad_, $a_Wildcards_)
    If ($_0_ = 0x00000000) Then Return SetError(0x00000002, 0x00000000, $_a_Tren_[0x00000000])
    $Runde_ = ($_U_)
    Switch ($Runde_)
    Case ($_Set_Runde_)
    ReDim $_a_A_ArraySave_[$_0_][0x00000002]
    _ArraySort($_a_A_ArraySave_, 0x00000000, 0x00000000, 0x00000000, 0x00000000)
    _Dubell_List_($_a_A_ArraySave_, $_0_)
    If ($_1_ = 0x00000000) Then Return SetError(0x00000002, 0x00000000, $_a_Tren_[0x00000000])
    ReDim $_a_B_ArraySave_[$_1_][0x00000002]
    $_0_ = 0x00000000
    $_1_ = 0x00000000
    Return ($_a_B_ArraySave_)
    EndSwitch
    Return ($_a_B_ArraySave_)
    EndFunc ;==>_File_List_Dubell

    [/autoit] [autoit][/autoit] [autoit]

    Func _Show_Dubell_($a_Pfad_, $a_Wildcards_)
    $_a_X_File_ = FileFindFirstFile($a_Pfad_ & $a_Wildcards_)
    If ($_a_X_File_ <> -0x00000001) Then
    Do
    $_a_X_File_Next_ = FileFindNextFile($_a_X_File_)
    If (@error) Then ExitLoop
    If (@extended = 0x00000001) Then ContinueLoop
    $_a_A_ArraySave_[$_0_][0x00000000] = ($_a_X_File_Next_)
    $_a_A_ArraySave_[$_0_][0x00000001] = ($a_Pfad_ & $_a_X_File_Next_)
    $_0_ += 0x00000001
    Until False
    FileClose($_a_X_File_)
    EndIf
    Dim $a_Verzeichnis_ = _FileListToArray($a_Pfad_, $_a_Tren_[0x00000001], 0x00000002)
    For $_i_ = 0x00000001 To UBound($a_Verzeichnis_) - 0x00000001
    If (_File_Link_($a_Pfad_ & $a_Verzeichnis_[$_i_]) = True) Then ContinueLoop
    _Show_Dubell_(String($a_Pfad_ & $a_Verzeichnis_[$_i_] & $_a_Tren_[0x00000002]), $a_Wildcards_)
    Next
    EndFunc ;==>_Show_Dubell_

    [/autoit] [autoit][/autoit] [autoit]

    Func _Dubell_List_($_a_C_ArraySave_, $_0_)
    For $_i_ = 0x00000000 To $_0_ - 0x00000001
    $_a_S_Save_ = $_a_Tren_[0x00000000]
    For $_e_ = $_i_ To $_0_ - 0x00000001
    If ($_a_C_ArraySave_[$_e_][0x00000000] <> $_a_C_ArraySave_[$_i_][0x00000000]) Then ExitLoop
    $_a_S_Save_ &= ($_a_C_ArraySave_[$_e_][0x00000001] & $_a_Tren_[0x00000003])
    Next
    If ($_e_ - $_i_ < 0x00000002) Then ContinueLoop
    $_a_B_ArraySave_[$_1_][0x00000000] = ($_a_C_ArraySave_[$_i_][0x00000000])
    $_a_B_ArraySave_[$_1_][0x00000001] = (StringTrimRight($_a_S_Save_, 0x00000001))
    $_i_ += ($_e_ - $_i_ - 0x00000001)
    $_1_ += 0x00000001
    Next
    EndFunc ;==>_Dubell_List_

    [/autoit] [autoit][/autoit] [autoit]

    Func _File_Link_($_sF_Link_)
    Dim $_a_K_32_ = DllOpen('kernel32.dll')
    Dim $_D_Array_ = DllCall($_a_K_32_, 'dword', 'GetFileAttributesW', 'wstr', $_sF_Link_)
    If (@error) Then Return SetError(0x00000000, @error, 0x00000000)
    Return BitAND($_D_Array_[0x00000000], 0x00000400) = 0x00000400
    EndFunc ;==>_File_Link_

    [/autoit]


    _Files_list_Rekursiv_Hash_Dubell

    Spoiler anzeigen
    [autoit]

    ;#RequireAdmin
    #include-once
    #include <Array.au3>
    #include <Crypt.au3>
    #include <File.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;==============================================================================================================================#
    ;~ Function Name....: _File_List_Hash_Dubell()
    ;
    ;~ Description......: Auflistung von Dateien
    ;
    ;~ $_a_Pfad_........: Pfad
    ;~ $_Set_Runde_.....: '1' ( Standart ) wie oft die Funktion aufgerufen wird ( beispiel C:\ & D:\ durchsuchen auf 2 setzen )
    ;~ $a_Wildcards_....: '*' ( Standart ) Suchbegrif u. o. Wildcards
    ;
    ;~ Return Value(s)..: Array ( Standard ) mit den gefundenen Dateien Array[0] endhält die anzahl ( Fund )
    ;
    ;~ Author(s)........: Kleiner27 (http://www.autoit.de) # 27.03.2010 09:00 #
    ;==============================================================================================================================#

    [/autoit] [autoit][/autoit] [autoit]

    Local $_U_
    Local $Runde_
    Local $_a_Hash
    Local $_a_S_Save_
    Local $_a_X_File_
    Local $_a_X_File_Next_
    Local $_0_ = 0x00000000
    Local $_1_ = 0x00000000
    Local $_a_A_ArraySave_[0x000F423F][0x0000003]
    Local $_a_B_ArraySave_[0x000F423F][0x0000002]
    Local $_a_Tren_[0x00000004] = [Chr(0x00000020), Chr(0x0000002A), Chr(0x0000005C), Chr(0x0000007C)]

    [/autoit] [autoit][/autoit] [autoit]

    Dim $iTimer = TimerInit()
    Dim $F = _File_List_Hash_Dubell('D:', 0, '*')
    _ArrayDisplay($F, TimerDiff($iTimer))

    [/autoit] [autoit][/autoit] [autoit]

    Func _File_List_Hash_Dubell($a_Pfad_, $_Set_Runde_ = True, $a_Wildcards_ = True)
    If (StringRight($a_Pfad_, 0x00000001) <> $_a_Tren_[0x00000002]) Then $a_Pfad_ = ($a_Pfad_ & $_a_Tren_[0x00000002])
    If ($_Set_Runde_ = $_a_Tren_[0x00000000] Or $_Set_Runde_ = 0x00000000) Then $_Set_Runde_ = (0x00000001)
    If ($a_Wildcards_ = $_a_Tren_[0x00000000]) Then $a_Wildcards_ = ($_a_Tren_[1])
    If ($_U_ < $Runde_) Then
    ReDim $_a_B_ArraySave_[0x000F423F][0x00000002]
    ReDim $_a_A_ArraySave_[0x000F423F][0x00000003]
    EndIf
    $_U_ += 0x00000001
    _Crypt_Startup()
    _Show_Dubell_Hash_($a_Pfad_, $a_Wildcards_)
    _Crypt_Shutdown()
    If ($_0_ = 0x00000000) Then Return SetError(0x00000002, 0x00000000, $_a_Tren_[0x00000000])
    $Runde_ = ($_U_)
    Switch ($Runde_)
    Case ($_Set_Runde_)
    ReDim $_a_A_ArraySave_[$_0_][0x00000003]
    _ArraySort($_a_A_ArraySave_, 0x00000000, 0x00000000, 0x00000000, 0x00000000)
    _Hash_Dubell_List_($_a_A_ArraySave_, $_0_)
    If ($_1_ = 0x00000000) Then Return SetError(0x00000002, 0x00000000, $_a_Tren_[0x00000000])
    ReDim $_a_B_ArraySave_[$_1_][0x00000002]
    $_0_ = 0x00000000
    $_1_ = 0x00000000
    Return ($_a_B_ArraySave_)
    EndSwitch
    Return ($_a_B_ArraySave_)
    EndFunc ;==>_File_List_Hash_Dubell

    [/autoit] [autoit][/autoit] [autoit]

    Func _Show_Dubell_Hash_($a_Pfad_, $a_Wildcards_)
    $_a_X_File_ = FileFindFirstFile($a_Pfad_ & $a_Wildcards_)
    If ($_a_X_File_ <> -0x00000001) Then
    Do
    $_a_X_File_Next_ = FileFindNextFile($_a_X_File_)
    If (@error) Then ExitLoop
    If (@extended = 0x00000001) Then ContinueLoop
    $_a_Hash = String(_Crypt_HashFile($a_Pfad_ & $_a_X_File_Next_, 0x00008003))
    If ($_a_Hash <> 0x00000000) Then ContinueLoop
    $_a_A_ArraySave_[$_0_][0x00000000] = ($_a_Hash)
    $_a_A_ArraySave_[$_0_][0x00000001] = ($_a_X_File_Next_)
    $_a_A_ArraySave_[$_0_][0x00000002] = ($a_Pfad_ & $_a_X_File_Next_)
    $_0_ += 0x00000001
    Until False
    FileClose($_a_X_File_)
    EndIf
    Dim $a_Verzeichnis_ = _FileListToArray($a_Pfad_, $_a_Tren_[0x00000001], 0x00000002)
    For $_i_ = 0x00000001 To UBound($a_Verzeichnis_) - 0x00000001
    If (_File_Link_($a_Pfad_ & $a_Verzeichnis_[$_i_]) = True) Then ContinueLoop
    _Show_Dubell_Hash_(String($a_Pfad_ & $a_Verzeichnis_[$_i_] & $_a_Tren_[0x00000002]), $a_Wildcards_)
    Next
    EndFunc ;==>_Show_Dubell_Hash_

    [/autoit] [autoit][/autoit] [autoit]

    Func _Hash_Dubell_List_($_a_C_ArraySave_, $_0_)
    For $_i_ = 0x00000000 To $_0_ - 0x00000001
    $_a_S_Save_ = $_a_Tren_[0x00000000]
    For $_e_ = $_i_ To $_0_ - 0x00000001
    If ($_a_C_ArraySave_[$_e_][0x00000000] <> $_a_C_ArraySave_[$_i_][0x00000000]) Then ExitLoop
    $_a_S_Save_ &= ($_a_C_ArraySave_[$_e_][0x00000002] & $_a_Tren_[0x00000003])
    Next
    If ($_e_ - $_i_ < 0x00000002) Then ContinueLoop
    $_a_B_ArraySave_[$_1_][0x00000000] = ($_a_C_ArraySave_[$_i_][0x00000001])
    $_a_B_ArraySave_[$_1_][0x00000001] = (StringTrimRight($_a_S_Save_, 0x00000001))
    $_i_ += ($_e_ - $_i_ - 0x00000001)
    $_1_ += 0x00000001
    Next
    EndFunc ;==>_Hash_Dubell_List_

    [/autoit] [autoit][/autoit] [autoit]

    Func _File_Link_($_sF_Link_)
    Dim $_a_K_32_ = DllOpen('kernel32.dll')
    Dim $_D_Array_ = DllCall($_a_K_32_, 'dword', 'GetFileAttributesW', 'wstr', $_sF_Link_)
    If (@error) Then Return SetError(0x00000000, @error, 0x00000000)
    Return BitAND($_D_Array_[0x00000000], 0x00000400) = 0x00000400
    EndFunc ;==>_File_Link_

    [/autoit]

    _Reg_Rekursiv

    Spoiler anzeigen
    [autoit]

    ;#RequireAdmin
    #include-once
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;===================================================================================================================================================#
    ;~ Function Name....: _Reg_List_Rekursiv()
    ;
    ;~ Description......: Auflistung von RegPfad
    ;
    ;~ $_a_Pfad_........: RegPfad
    ;~ $_Set_Runde_.....: '1' ( Standart ) wie oft die Funktion aufgerufen wird ( beispiel HKEY_USERS & HKEY_CURRENT_USER durchsuchen auf 2 setzen )
    ;
    ;~ Return Value(s)..: Array ( Standard ) mit den gefundenen RegPfad Array[0] endhält die anzahl ( Fund )
    ;
    ;~ Author(s)........: Kleiner27 (http://www.autoit.de) # 27.03.2010 09:00 #
    ;===================================================================================================================================================#

    [/autoit] [autoit][/autoit] [autoit]

    Local $_U_
    Local $Runde_
    Local $RegPaht_Next_
    Local $_a_Zaehlen_ = 0x00000001
    Local $Reg_Paht_Save_[0x000F423F]
    Local $_a_Tren_[0x00000002] = [Chr(0x00000020), Chr(0x0000005C)]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Dim $iTimer = TimerInit()
    Dim $F = _Reg_List_Rekursiv('HKEY_CURRENT_USER', 0)
    _ArrayDisplay($F, TimerDiff($iTimer))

    [/autoit] [autoit][/autoit] [autoit]

    Func _Reg_List_Rekursiv($RegPaht, $_Set_Runde_ = True)
    If ($_Set_Runde_ = $_a_Tren_[0x00000000] Or $_Set_Runde_ = 0x00000000) Then $_Set_Runde_ = (0x00000001)
    If ($_U_ < $Runde_) Then
    ReDim $Reg_Paht_Save_[0x000F423F]
    EndIf
    $_U_ += 0x00000001
    _Show_Reg_Rekursiv($RegPaht)
    $Runde_ = ($_U_)
    Switch ($Runde_)
    Case ($_Set_Runde_)
    ReDim $Reg_Paht_Save_[$_a_Zaehlen_]
    $Reg_Paht_Save_[0x00000000] = ($_a_Zaehlen_)
    $_a_Zaehlen_ = 0x00000001
    Return ($Reg_Paht_Save_)
    EndSwitch
    Return ($Reg_Paht_Save_)
    EndFunc ;==>_Reg_List_Rekursiv

    [/autoit] [autoit][/autoit] [autoit]

    Func _Show_Reg_Rekursiv($RegPaht)
    For $i = 0x00000001 To 0x000F423F
    $RegPaht_Next_ = RegEnumKey($RegPaht, $i)
    If @error <> 0x00000000 Then ExitLoop
    $Reg_Paht_Save_[$_a_Zaehlen_] = ($RegPaht & $_a_Tren_[0x00000001] & $RegPaht_Next_)
    $_a_Zaehlen_ += 0x00000001
    _Show_Reg_Rekursiv($RegPaht & $_a_Tren_[0x00000001] & $RegPaht_Next_)
    Next
    EndFunc ;==>_Show_Reg_Rekursiv

    [/autoit]


    Viel Spass!
    LG Kleiner

  • Hallo Kleiner,

    ich habe Deinen Quellcode _Reg_Rekursiv runtergeladen und fand ihn ein wenig unübersichtlich. Daher habe ich mich mal durchgearbeitet und finde ihn in der folgenden Form ein wenig verständlicher. Beim Ausprobieren habe ich keine Unterschiede gefunden, obwohl ich einiges gekürzt habe. Hatten die "wegoptimierten" Zeilen eine Bedeutung die ich nicht gesehen habe oder läuft das bei Dir auch noch korrekt wie gewollt?


    [autoit]

    #include-once
    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    Local $RegPath_Next_
    Local $iZaehlen = 1
    Local $RegPathResult[999999]
    Dim $iTimer = TimerInit()
    Dim $arrRegKey = _Reg_List('HKEY_CURRENT_USER')

    [/autoit][autoit][/autoit][autoit]

    _ArrayDisplay($arrRegKey, TimerDiff($iTimer))

    [/autoit][autoit][/autoit][autoit]

    Func _Reg_List($RegPath)
    _Do_Reg_Rekursiv($RegPath)
    ReDim $RegPathResult[$iZaehlen]
    $RegPathResult[0] = ($iZaehlen)
    Return ($RegPathResult)
    EndFunc ;==>_Reg_List

    [/autoit][autoit][/autoit][autoit]

    Func _Do_Reg_Rekursiv($RegPath)
    For $i = 1 To 999999
    $RegPath_Next_ = RegEnumKey($RegPath, $i)
    If @error <> 0 Then ExitLoop
    $RegPathResult[$iZaehlen] = ($RegPath & "\" & $RegPath_Next_)
    $iZaehlen += 1
    _Do_Reg_Rekursiv($RegPath & "\" & $RegPath_Next_)
    Next
    EndFunc ;==>_Do_Reg_Rekursiv

    [/autoit]
  • Hi ninja_zx9r,

    der Sinn der Obigen Funktion war u. ist das, du alle Strukturen nach einander einlesen kannst, ich muss mal
    meine Werke überarbeiten die gepostet wurden, die ersten 2 Funktionen sind schon oft überarbeitet
    worden u. in einer zusammen gefasst.
    Heute schreibe ich die Rekursion anders, Dynamisch u. nicht
    das Array auf max. o. andere Größen vor Deklarieren .


    Spoiler anzeigen
    [autoit]

    Local $RegPathResult = ''
    Local $iTimer = TimerInit()
    Local $arrRegKey = _RegList('HKCU')
    _ArrayDisplay($arrRegKey, TimerDiff($iTimer))

    [/autoit] [autoit][/autoit] [autoit]

    Func _RegList($RegPath)
    _RegRekursiv($RegPath)
    Return StringSplit(StringTrimLeft($RegPathResult, 1), '|', 2)
    EndFunc ;==>_RegList

    [/autoit] [autoit][/autoit] [autoit]

    Func _RegRekursiv($RegPath, $RegPathNext = '', $i = 1)
    Do
    $RegPathNext = RegEnumKey($RegPath, $i)
    If @error <> 0 Then ExitLoop
    $i += 1
    $RegPathResult &= '|' & ($RegPath & '\' & $RegPathNext)
    Until _RegRekursiv($RegPath & '\' & $RegPathNext)
    EndFunc ;==>_RegRekursiv

    [/autoit]

    Lg Kleiner

  • Klar, man gibt das gute Zeug doch nicht jedem :D

    Letztendlich ist es aber gar nicht schlecht, auch ein einfaches Script zu haben. Sachen wie z.B. dynamische Arrays machen es nur schwerer Verständlich für den Anfang.

    Und wenn man dann tiefer einsteigen möchte, z.B. die Ausgabe anpassen, dann findet man genug komplexe Sachen in banal anmutendenZeilen wie beispielsweise _ArrayDisplay()


    Danke nochmal an Kleiner für den guten Einstieg in das Thema