#cs ----------------------------------------------------------------------------

	AutoIt Version: 	3.3.6.1
	Author:         	Marcel Böhm (Reaker)
	Email:				contact.boehm@googlemail.com
	Version:			1.0 (Developer Script)
	Start Date:			25.05.2010
	Release Date:


	Lizens:

	Copyright 2010 by Marcel Böhm
	http://creativecommons.org/licenses/by-nc-nd/3.0/de/legalcode
	Sie dürfen:
	das Werk bzw. den Inhalt vervielfältigen, verbreiten und öffentlich zugänglich machen
	Zu den folgenden Bedingungen:
	Namensnennung — Sie müssen den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen.
	Keine kommerzielle Nutzung — Dieses Werk bzw. dieser Inhalt darf nicht für kommerzielle Zwecke verwendet werden.
	Keine Bearbeitung — Dieses Werk bzw. dieser Inhalt darf nicht bearbeitet, abgewandelt oder in anderer Weise verändert werden.


	bernd670: FileListRecursive



#ce ----------------------------------------------------------------------------

#include <Array.au3>
#include <Inet.au3>
#include <File.au3>
#include <String.au3>
#include <Misc.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <Crypt.au3>
#include <WindowsConstants.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>

Global $pName = 'Viva'
Global $pVersion = '1.0 Beta'
Global $pAuthor = 'Marcel Böhm (Reaker)'
Global $pEmail = 'contact.boehm@googlemail.com'

Dim $File[1], $Folder[1]

Global $DataBase = @ScriptDir & "\test.txt"



Global $Form1 = GUICreate($pName & " " & $pVersion, 717, 390, 216, 170)
GUISetIcon(@ScriptDir & "\Key.ico")
TraySetIcon(@ScriptDir & "\Key.ico")
GUISetFont(10, 400, 0, "Microsoft YaHei")
GUISetBkColor(0xb2e1ff)
Global $MenuItem3 = GUICtrlCreateMenu("MenuItem3")
Global $MenuItem2 = GUICtrlCreateMenu("MenuItem2")
Global $MenuItem1 = GUICtrlCreateMenu("MenuItem1")
Global $Group1 = GUICtrlCreateGroup("Verschlüsseln", 10, 10, 355, 170)
Global $Input1 = GUICtrlCreateInput(@ScriptDir & "\test", 90, 38, 181, 25)
Global $Label1 = GUICtrlCreateLabel("Pfad", 20, 40, 30, 17)
Global $Label2 = GUICtrlCreateLabel("Passwort", 20, 88, 60, 17)
Global $Input2 = GUICtrlCreateInput("fasdf", 90, 85, 181, 25)
Global $Button1 = GUICtrlCreateButton("Durchsuchen", 280, 37, 75, 26, $WS_GROUP)
GUICtrlSetFont(-1, 8, 400, 0, "Microsoft YaHei")
Global $Button2 = GUICtrlCreateButton("Verschlüsseln", 250, 140, 100, 30)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $Group2 = GUICtrlCreateGroup("Entschlüsseln", 10, 189, 355, 170)
Global $Input3 = GUICtrlCreateInput(@ScriptDir, 90, 217, 181, 25)
Global $Label3 = GUICtrlCreateLabel("Pfad", 20, 218, 30, 17)
Global $Label4 = GUICtrlCreateLabel("Passwort", 20, 265, 60, 17)
Global $Input4 = GUICtrlCreateInput("", 90, 265, 181, 25)
Global $Button3 = GUICtrlCreateButton("Durchsuchen", 280, 217, 75, 26, $WS_GROUP)
GUICtrlSetFont(-1, 8, 400, 0, "Microsoft YaHei")
Global $Button4 = GUICtrlCreateButton("Entschlüsseln", 250, 320, 100, 30)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $Edit1 = GUICtrlCreateEdit("", 374, 16, 333, 141, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_READONLY, $ES_WANTRETURN, $WS_BORDER))
GUICtrlSetData(-1, "Edit1")
Global $Progress1 = GUICtrlCreateProgress(376, 160, 329, 25)
Global $Pic1 = GUICtrlCreatePic(@ScriptDir & "\viva.jpg", 378, 190, 321, 171, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))




GUISetState(@SW_SHOW)



While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
		Case $Button2
			If Not FileExists(GUICtrlRead($Input1)) Then
				MsgBox(64, $pName, "Der Pfad existiert nicht!")
			ElseIf GUICtrlRead($Input2) = '' Then
				MsgBox(64, $pName, "Bitte gebe ein Passwort ein!")
			Else
				GUICtrlSetState($Input1, $GUI_DISABLE)
				GUICtrlSetState($Input2, $GUI_DISABLE)
				GUICtrlSetState($Input3, $GUI_DISABLE)
				GUICtrlSetState($Input4, $GUI_DISABLE)
				GUICtrlSetState($Button1, $GUI_DISABLE)
				GUICtrlSetState($Button1, $GUI_DISABLE)
				GUICtrlSetState($Button1, $GUI_DISABLE)
				_Crypt_Dir(GUICtrlRead($Input1), GUICtrlRead($Input2))
			EndIf
	EndSwitch
WEnd


;===============================================================================
; Name:             _Crypt_Dir
; Description:      Verschlüsselt ein Verzeichnis rekursiv
; Parameter(s):     $sSourceDir = Das Verzeichnis zum verschlüsseln
;					$sPassword = Das Passwort zum verschlüsseln
; Requirement(s):   keine
; Return Value(s):
; Author(s):        Marcel Böhm (reaker)
;
;===============================================================================
Func _Crypt_Dir($sSourceDir, $sPassword)
	Local $Dir, $CryptPassword, $DirSize
	Local $CounterFile, $CounterFolder, $Counter
	Local $GesDatas, $Output

	$iTimer = TimerInit()
	$Dir = $sSourceDir
	$CryptPassword = $sPassword
	$CounterFile = 0
	$CounterFolder = 0
	$Counter = 0
	$Output = ''


	ArrayDelete($Folder)
	ArrayDelete($File)



	If StringRight($Dir, 1) <> "\" Then $Dir &= "\"

	$Array = FileListRecursive($Dir, "", 0, 1)
	$DirSize = DirGetSize($Dir)
	For $i = 1 To $Array[0]
		_ArrayAdd($Folder, StringTrimLeft($Array[$i], StringInStr($Dir, "\", 1, -1)))
	Next
	For $i = 1 To UBound($Folder) - 1
		$Array = _FileListToArray($Dir & $Folder[$i], "*", 1)
		For $ii = 1 To UBound($Array) - 1
			_ArrayAdd($File, StringTrimLeft($Dir & $Folder[$i] & $Array[$ii], StringInStr($Dir, "\", 1, -1)))
		Next
	Next

	$GesDatas = UBound($Folder) + UBound($File) - 2

	$Output &= "<check>"

	$Output &= 'PYcngkMiUmleXddemWGmuZcruGedBVBmvdCvncIHoFEcUPsfHMdEOosCZmkxUCejcmMfdUiOJlrddrHjtUjdkrXSfdaCRjiZLwGJdgDaeeETfYisdptQBcdtaqdUfGIPhOidJjcpHhdjoJEZICrdQSoerVEzskJAJUwRddNCDWIXMrSBFiqBtpVfYcwdjlndzSxSuhyNMqcxVSmOlWVzdBdRWGhwyCZdtoVWubbIdBKQxWdlTXYArYJVTuoNdApGkoBjRznKANGjFdyEbduNTVYQFwdzpgMMddmZSyZHMGNBBvZnnvDwKxQGafYPvDcBDSvlhNTdpGWdbteXdFprPpYSPaaOcwboayrdpqvEfsdApdFwFdsQBnslVxrbBddrtdjwNeAJbsdygddddSddKDpfKJZEdddwrvdfjOPYSmbdxodFSKSaSpgFdyLJxlrjLLdxPBKjYyCHoLiwVqgwEfOOCPpdYlndgkYjQiujNQydukrMdRQyDNGpFDDdATucNClpVqmudlmbMVdgdXowltifWvQpNTkEyOvurZAsCnEVBAWdNBqTjuMdNdiNouXqyWAiyXKvZdJdpSddzHdrWBeNNtzhxlqdgdRdIqxdqAntOVXCWBkDWszzyqiERWUqVfcIJGnnQadGuinyedouZvnHqZdPloKZDdQedEydTzzddPLxTdbOFudddJJABNPWMhPJAQlBFqypalxNpsVxQdddEdsdOAdBeEErEPdcoFdKOuRpUHWhcSaQpRkNFxdkxdSYdzGPxydAdHvfefsILoaMsdoTRdIiFPFggNgbrIvkTQCxTuHGjyOaGswxMGOEdhdfnjnlGcddiMTdyYjVfNrXdLlSJDKAodEkddNYozhBwRqAGdddcQoFuwiqDARQWXdnUNxyTnnqrkDnXQRjBYRdPdDKOaxHrDsUYYhtveHkmLbJpQIpdIdddhUNEhKbaPvFYOSzyBdPKYxMzodFbLqNdQpSyYxBPHMhvAGDooVkDBfzdyjAdWggixdqrMOQYYJmwZnDyEWzuMbzzSlsdBFpUUtmFddWNvdbIYlrOpTDbGJVIjINPgjvPVdiddXANddiddwOdXFzIKywhEsdkhINdLTNFdRielXNGdiaFBIzFbkoTiUyYPdLJASdZdWgBMfrWxdidGgrjFtMdqMvOHapKdavpIdoAipdxOddyHmfjmatFZYTxDTldfITvDHySVvadwWDSkVqRldxLdlPIyCdxrVWxtANTNSBPDvMFvBdmxtxJSuVlepfyWVWFZrmeqwddwdCWAGdXJTKdTSFBXSBQygRYziefdoUqSVvwdbHUDHyddlpqJxlLXUOuJFErOQdRbLBuKLdBvQJPeQRpedRHQgdFFZeyYILxOErmSdaCQPJeNGCpkaztXseetdEhJSdQxjhbJjeddpudJKUjXGOayuikdrkpbdDiUTDEjtdkenlndZnCcjaXddRSyHkaddUhoTUuvrddAutiHwejFaSDhdotdkKBLpWNOldLrAMpdFZudVYdeddnFhOPUfRnQdddAEOaKsvgizVUjzHUEYLuwetgdDnrfzpdklvyQwlfNzHKfuUusGAmxeftOdDaMBsyCwJdPKdpsBkBAVCohKVdPmqZoDzpbjdSsDInzyCHLhhujqWDcdKdOOBdShCrALsTgdsXSuxWuLAoCKNPHBYqhoTndMWHVHizdCtPdgjFqwaKnEpxYUDlhBdowLFDTkEHxxMtOYPziMdKdxUhqibIddJvQRlwQKdpROoDcdNeYAtadtFWdMLhrdcyrGKiudkvojoUAdKblyVyPaEanbLmMdsZeBUzgkqdmsxsdEHgQhdLiuiXEwMdyVYbOhdjYSqyNdPddlddrTIpTWMvHsJaNwOUPdXGzdACXOXznHslEdyzWSmWBUGJqLidRnJfsrddKdRRsxCICqPKLbVSxmfNuwKBdvdpdZkHTKOncdmRtfprvvqUZdJGddzDaWyYGRTXfFdhaxdOdmQ'

	$Output &= "</check>"


	$Output &= "<folder>"
	For $i = 1 To UBound($Folder) - 1
		$Counter += 1
		$CounterFolder += 1
;~ 		$Output &= $Folder[$i] & "$"
		$Output &= _Crypt_EncryptData($Folder[$i], $CryptPassword, $CALG_RC4) & "$"
		GUICtrlSetData($Progress1, (($Counter / $GesDatas)) * 100)
	Next
	$Output &= "</folder>"

	$Output &= "<file>"
	For $i = 1 To UBound($File) - 1
		$hFile = FileOpen($Dir & $File[$i], 16)
		$Read = FileRead($hFile)
		$Counter += 1
		$CounterFile += 1
;~ 		$Output &= $File[$i] & "$" & "content" & "$"
		$Output &= _Crypt_EncryptData($File[$i], $CryptPassword, $CALG_RC4) & "$" & _Crypt_EncryptData($Read, $CryptPassword, $CALG_RC4) & "$"
		FileClose($hFile)
		GUICtrlSetData($Progress1, (($Counter / $GesDatas)) * 100)
	Next
	$Output &= "</file>"




	FileDelete($DataBase)
	$hFile = FileOpen($DataBase, 18)
	FileWrite($hFile, $Output)
	FileClose($hFile)

	$Output = ''

	$dTimer = TimerDiff($iTimer)
;~ 	$dTimer = Int($dTimer / 1000)
	If $dTimer = 0 Then
		$dTimer = "> 0 "
	EndIf

	MsgBox(64, $pName, "Verschlüsselung abgeschlossen!" & @CRLF & "Ordner: " & $CounterFolder & @CRLF & "Dateien: " & $CounterFile & @CRLF & "Dauer: " & Int($dTimer) & " ms" & @CRLF & "Input: " & Int($DirSize / 1024 / 1024) & " MByte" & @CRLF & "Output: " & Int(FileGetSize($DataBase) / 1024 / 1024) & " MByte" & @CRLF & "Geschwindikgkeit: " & Int(($DirSize / 1024 / 1024) / $dTimer / 1000))

	MsgBox(0, "", _CheckArchive())

EndFunc   ;==>_Crypt_Dir

Func _CheckArchive()
	Local $Read, $iTimer
	$iTimer = TimerInit()
	$Read = FileRead($DataBase)
	ConsoleWrite("Time to read DataBase: " & TimerDiff($iTimer) & " ms" & @CRLF)
	$iTimer = TimerInit()
	$CheckArchive = _StringBetween(FileRead($DataBase), '<check>', '</check>')
	ConsoleWrite("Time to check String: " & TimerDiff($iTimer) & " ms" & @CRLF)
	If $CheckArchive[0] = 'PYcngkMiUmleXddemWGmuZcruGedBVBmvdCvncIHoFEcUPsfHMdEOosCZmkxUCejcmMfdUiOJlrddrHjtUjdkrXSfdaCRjiZLwGJdgDaeeETfYisdptQBcdtaqdUfGIPhOidJjcpHhdjoJEZICrdQSoerVEzskJAJUwRddNCDWIXMrSBFiqBtpVfYcwdjlndzSxSuhyNMqcxVSmOlWVzdBdRWGhwyCZdtoVWubbIdBKQxWdlTXYArYJVTuoNdApGkoBjRznKANGjFdyEbduNTVYQFwdzpgMMddmZSyZHMGNBBvZnnvDwKxQGafYPvDcBDSvlhNTdpGWdbteXdFprPpYSPaaOcwboayrdpqvEfsdApdFwFdsQBnslVxrbBddrtdjwNeAJbsdygddddSddKDpfKJZEdddwrvdfjOPYSmbdxodFSKSaSpgFdyLJxlrjLLdxPBKjYyCHoLiwVqgwEfOOCPpdYlndgkYjQiujNQydukrMdRQyDNGpFDDdATucNClpVqmudlmbMVdgdXowltifWvQpNTkEyOvurZAsCnEVBAWdNBqTjuMdNdiNouXqyWAiyXKvZdJdpSddzHdrWBeNNtzhxlqdgdRdIqxdqAntOVXCWBkDWszzyqiERWUqVfcIJGnnQadGuinyedouZvnHqZdPloKZDdQedEydTzzddPLxTdbOFudddJJABNPWMhPJAQlBFqypalxNpsVxQdddEdsdOAdBeEErEPdcoFdKOuRpUHWhcSaQpRkNFxdkxdSYdzGPxydAdHvfefsILoaMsdoTRdIiFPFggNgbrIvkTQCxTuHGjyOaGswxMGOEdhdfnjnlGcddiMTdyYjVfNrXdLlSJDKAodEkddNYozhBwRqAGdddcQoFuwiqDARQWXdnUNxyTnnqrkDnXQRjBYRdPdDKOaxHrDsUYYhtveHkmLbJpQIpdIdddhUNEhKbaPvFYOSzyBdPKYxMzodFbLqNdQpSyYxBPHMhvAGDooVkDBfzdyjAdWggixdqrMOQYYJmwZnDyEWzuMbzzSlsdBFpUUtmFddWNvdbIYlrOpTDbGJVIjINPgjvPVdiddXANddiddwOdXFzIKywhEsdkhINdLTNFdRielXNGdiaFBIzFbkoTiUyYPdLJASdZdWgBMfrWxdidGgrjFtMdqMvOHapKdavpIdoAipdxOddyHmfjmatFZYTxDTldfITvDHySVvadwWDSkVqRldxLdlPIyCdxrVWxtANTNSBPDvMFvBdmxtxJSuVlepfyWVWFZrmeqwddwdCWAGdXJTKdTSFBXSBQygRYziefdoUqSVvwdbHUDHyddlpqJxlLXUOuJFErOQdRbLBuKLdBvQJPeQRpedRHQgdFFZeyYILxOErmSdaCQPJeNGCpkaztXseetdEhJSdQxjhbJjeddpudJKUjXGOayuikdrkpbdDiUTDEjtdkenlndZnCcjaXddRSyHkaddUhoTUuvrddAutiHwejFaSDhdotdkKBLpWNOldLrAMpdFZudVYdeddnFhOPUfRnQdddAEOaKsvgizVUjzHUEYLuwetgdDnrfzpdklvyQwlfNzHKfuUusGAmxeftOdDaMBsyCwJdPKdpsBkBAVCohKVdPmqZoDzpbjdSsDInzyCHLhhujqWDcdKdOOBdShCrALsTgdsXSuxWuLAoCKNPHBYqhoTndMWHVHizdCtPdgjFqwaKnEpxYUDlhBdowLFDTkEHxxMtOYPziMdKdxUhqibIddJvQRlwQKdpROoDcdNeYAtadtFWdMLhrdcyrGKiudkvojoUAdKblyVyPaEanbLmMdsZeBUzgkqdmsxsdEHgQhdLiuiXEwMdyVYbOhdjYSqyNdPddlddrTIpTWMvHsJaNwOUPdXGzdACXOXznHslEdyzWSmWBUGJqLidRnJfsrddKdRRsxCICqPKLbVSxmfNuwKBdvdpdZkHTKOncdmRtfprvvqUZdJGddzDaWyYGRTXfFdhaxdOdmQ' Then
;~ 	If StringMid(FileRead($DataBase), 7, 2007) = 'PYcngkMiUmleXddemWGmuZcruGedBVBmvdCvncIHoFEcUPsfHMdEOosCZmkxUCejcmMfdUiOJlrddrHjtUjdkrXSfdaCRjiZLwGJdgDaeeETfYisdptQBcdtaqdUfGIPhOidJjcpHhdjoJEZICrdQSoerVEzskJAJUwRddNCDWIXMrSBFiqBtpVfYcwdjlndzSxSuhyNMqcxVSmOlWVzdBdRWGhwyCZdtoVWubbIdBKQxWdlTXYArYJVTuoNdApGkoBjRznKANGjFdyEbduNTVYQFwdzpgMMddmZSyZHMGNBBvZnnvDwKxQGafYPvDcBDSvlhNTdpGWdbteXdFprPpYSPaaOcwboayrdpqvEfsdApdFwFdsQBnslVxrbBddrtdjwNeAJbsdygddddSddKDpfKJZEdddwrvdfjOPYSmbdxodFSKSaSpgFdyLJxlrjLLdxPBKjYyCHoLiwVqgwEfOOCPpdYlndgkYjQiujNQydukrMdRQyDNGpFDDdATucNClpVqmudlmbMVdgdXowltifWvQpNTkEyOvurZAsCnEVBAWdNBqTjuMdNdiNouXqyWAiyXKvZdJdpSddzHdrWBeNNtzhxlqdgdRdIqxdqAntOVXCWBkDWszzyqiERWUqVfcIJGnnQadGuinyedouZvnHqZdPloKZDdQedEydTzzddPLxTdbOFudddJJABNPWMhPJAQlBFqypalxNpsVxQdddEdsdOAdBeEErEPdcoFdKOuRpUHWhcSaQpRkNFxdkxdSYdzGPxydAdHvfefsILoaMsdoTRdIiFPFggNgbrIvkTQCxTuHGjyOaGswxMGOEdhdfnjnlGcddiMTdyYjVfNrXdLlSJDKAodEkddNYozhBwRqAGdddcQoFuwiqDARQWXdnUNxyTnnqrkDnXQRjBYRdPdDKOaxHrDsUYYhtveHkmLbJpQIpdIdddhUNEhKbaPvFYOSzyBdPKYxMzodFbLqNdQpSyYxBPHMhvAGDooVkDBfzdyjAdWggixdqrMOQYYJmwZnDyEWzuMbzzSlsdBFpUUtmFddWNvdbIYlrOpTDbGJVIjINPgjvPVdiddXANddiddwOdXFzIKywhEsdkhINdLTNFdRielXNGdiaFBIzFbkoTiUyYPdLJASdZdWgBMfrWxdidGgrjFtMdqMvOHapKdavpIdoAipdxOddyHmfjmatFZYTxDTldfITvDHySVvadwWDSkVqRldxLdlPIyCdxrVWxtANTNSBPDvMFvBdmxtxJSuVlepfyWVWFZrmeqwddwdCWAGdXJTKdTSFBXSBQygRYziefdoUqSVvwdbHUDHyddlpqJxlLXUOuJFErOQdRbLBuKLdBvQJPeQRpedRHQgdFFZeyYILxOErmSdaCQPJeNGCpkaztXseetdEhJSdQxjhbJjeddpudJKUjXGOayuikdrkpbdDiUTDEjtdkenlndZnCcjaXddRSyHkaddUhoTUuvrddAutiHwejFaSDhdotdkKBLpWNOldLrAMpdFZudVYdeddnFhOPUfRnQdddAEOaKsvgizVUjzHUEYLuwetgdDnrfzpdklvyQwlfNzHKfuUusGAmxeftOdDaMBsyCwJdPKdpsBkBAVCohKVdPmqZoDzpbjdSsDInzyCHLhhujqWDcdKdOOBdShCrALsTgdsXSuxWuLAoCKNPHBYqhoTndMWHVHizdCtPdgjFqwaKnEpxYUDlhBdowLFDTkEHxxMtOYPziMdKdxUhqibIddJvQRlwQKdpROoDcdNeYAtadtFWdMLhrdcyrGKiudkvojoUAdKblyVyPaEanbLmMdsZeBUzgkqdmsxsdEHgQhdLiuiXEwMdyVYbOhdjYSqyNdPddlddrTIpTWMvHsJaNwOUPdXGzdACXOXznHslEdyzWSmWBUGJqLidRnJfsrddKdRRsxCICqPKLbVSxmfNuwKBdvdpdZkHTKOncdmRtfprvvqUZdJGddzDaWyYGRTXfFdhaxdOdmQ' Then
		Return True
	Else
		Return False
	EndIf
EndFunc   ;==>_CheckArchive





Func _CheckPassword($_CheckPassword)
	Local $aResult, $iRows, $iColumns
	_SQLite_GetTable2d(-1, "Select * FROM keycontrol", $aResult, $iRows, $iColumns)
	If _Crypt_HashData($_CheckPassword, $CALG_MD5) = $aResult[1][0] Then
		Return True
	Else
		Return False
	EndIf
EndFunc   ;==>_CheckPassword

;===============================================================================
; Name:             FileListRecursive
; Description:      Sucht rekursiv nach Dateien und Ordnern
; Parameter(s):     $szStartPath = Path ab dem gesucht werden soll
;                   $szFileName  = Datei nach der gesucht werden soll
;                   $iFlag (optional) = Gibt an was zurückgegeben werden soll
;                                            0 = Dateien und Ordner (default)
;                                            1 = nur Dateien
;                                            2 = nur Ordner (ignoriert $szFileName)
;                   $iRetFormat (optional) = Rückgabeformat
;                                             0 = als String (default)
;                                             1 = als Array
;                    $szDelim (optional) = Trennzeichen wenn $iRetFormat = 0 (@CRLF ist default)
; Requirement(s):   keine
; Return Value(s):  bei Erfolg: Ergebnis als String oder Array
;                   bei Fehler:
; Author(s):        bernd670
;
;===============================================================================
Func FileListRecursive($szStartPath, $szFileName, $iFlag = 0, $iRetFormat = 0, $szDelim = @CRLF)
	Local $hFF, $szFindName, $szRetValue = ""

	If $iFlag = Default Then $iFlag = 0
	If $iRetFormat = Default Then $iRetFormat = 0
	If $szDelim = Default Then $szDelim = @CRLF

	If StringRight($szStartPath, 1) <> "\" Then $szStartPath &= "\"

	If $iFlag < 2 Then
		$hFF = FileFindFirstFile($szStartPath & $szFileName)

		If $hFF <> -1 Then
			While True
				$szFindName = FileFindNextFile($hFF)
				If @error Then
					FileClose($hFF)
					ExitLoop
				EndIf
				If ($szRetValue <> "") And (StringRight($szRetValue, StringLen($szDelim)) <> $szDelim) Then $szRetValue &= $szDelim
				$szRetValue &= $szStartPath & $szFindName
			WEnd
		EndIf
	EndIf
	$hFF = FileFindFirstFile($szStartPath & "*.*")

	If $hFF = -1 Then Return $szRetValue

	While True
		$szFindName = FileFindNextFile($hFF)
		If @error Then
			FileClose($hFF)
			ExitLoop
		EndIf

		If StringInStr(FileGetAttrib($szStartPath & $szFindName), "d") Then
			If ($szRetValue <> "") And (StringRight($szRetValue, StringLen($szDelim)) <> $szDelim) Then $szRetValue &= $szDelim
			If ($iFlag = 0) Or ($iFlag = 2) Then $szRetValue &= $szStartPath & $szFindName & "\" & $szDelim
			$szRetValue &= FileListRecursive($szStartPath & $szFindName & "\", $szFileName, $iFlag, 0, $szDelim)
		EndIf
	WEnd

	If StringRight($szRetValue, StringLen($szDelim)) = $szDelim Then $szRetValue = StringTrimRight($szRetValue, StringLen($szDelim))
	If $iRetFormat = 0 Then
		Return $szRetValue
	Else
		Return StringSplit($szRetValue, $szDelim, 1)
	EndIf
EndFunc   ;==>FileListRecursive


Func ArrayDelete(ByRef $Array)
	If IsArray($Array) Then
		If UBound($Array, 0) = 1 Then
			For $i = 1 To UBound($Array) - 1
				_ArrayDelete($Array, $i)
			Next
		EndIf
	Else
		Return SetError(1)
	EndIf

	Return 1
EndFunc   ;==>ArrayDelete