Func _FILESEARCH($SPATH, $SFILTER = "*.*", $IFLAG = 0, $SEXCLUDE = "", $IRECURSE = True) If Not FileExists($SPATH) Then Return SetError(1, 1, "") If $SFILTER = -1 Or $SFILTER = Default Then $SFILTER = "*.*" If $IFLAG = -1 Or $IFLAG = Default Then $IFLAG = 0 If $SEXCLUDE = -1 Or $SEXCLUDE = Default Then $SEXCLUDE = "" Local $ABADCHAR[6] = ["\", "/", ":", ">", "<", "|"] $SFILTER = StringRegExpReplace($SFILTER, "\s*;\s*", ";") If StringRight($SPATH, 1) <> "\" Then $SPATH &= "\" For $ICC = 0 To 5 If StringInStr($SFILTER, $ABADCHAR[$ICC]) Or StringInStr($SEXCLUDE, $ABADCHAR[$ICC]) Then Return SetError(2, 2, "") Next If StringStripWS($SFILTER, 8) = "" Then Return SetError(2, 2, "") If Not ($IFLAG = 0 Or $IFLAG = 1 Or $IFLAG = 2) Then Return SetError(3, 3, "") Local $HOUTFILE = @TempDir & "\winsetup" & Random(10, 9999, 1) & ".tmp" If Not StringInStr($SFILTER, ";") Then $SFILTER &= ";" Local $ASPLIT = StringSplit(StringStripWS($SFILTER, 8), ";"), $SREAD, $SHOLDSPLIT For $ICC = 1 To $ASPLIT[0] If StringStripWS($ASPLIT[$ICC], 8) = "" Then ContinueLoop If StringLeft($ASPLIT[$ICC], 1) = "." And UBound(StringSplit($ASPLIT[$ICC], ".")) - 2 = 1 Then $ASPLIT[$ICC] = "*" & $ASPLIT[$ICC] $SHOLDSPLIT &= '"' & $SPATH & $ASPLIT[$ICC] & '" ' Next $SHOLDSPLIT = StringTrimRight($SHOLDSPLIT, 1) If $IRECURSE Then RunWait(@ComSpec & " /c dir /b /s /a " & $SHOLDSPLIT & ' > "' & $HOUTFILE & '"', "", @SW_HIDE) Else RunWait(@ComSpec & " /c dir /b /a " & $SHOLDSPLIT & ' /o-e /od > "' & $HOUTFILE & '"', "", @SW_HIDE) EndIf $SREAD &= FileRead($HOUTFILE) If Not FileExists($HOUTFILE) Then Return SetError(4, 4, "") FileDelete($HOUTFILE) If StringStripWS($SREAD, 8) = "" Then SetError(4, 4, "") Local $AFSPLIT = StringSplit(StringTrimRight(StringStripCR($SREAD), 1), @LF) Local $SHOLD, $A_ANSIFNAME For $ICC = 1 To $AFSPLIT[0] $A_ANSIFNAME = DllCall("user32.dll", "Int", "OemToChar", "str", $AFSPLIT[$ICC], "str", "") If @error = 0 Then $AFSPLIT[$ICC] = $A_ANSIFNAME[2] If $SEXCLUDE And StringLeft($AFSPLIT[$ICC], StringLen(StringReplace($SEXCLUDE, "*", ""))) = StringReplace($SEXCLUDE, "*", "") Then ContinueLoop Switch $IFLAG Case 0 $SHOLD &= $AFSPLIT[$ICC] & Chr(1) Case 1 If StringInStr(FileGetAttrib($SPATH & "\" & $AFSPLIT[$ICC]), "d") = 0 And StringInStr(FileGetAttrib($AFSPLIT[$ICC]), "d") = 0 Then If StringRegExp($AFSPLIT[$ICC], "\w:\\") = 0 Then $SHOLD &= $SPATH & $AFSPLIT[$ICC] & Chr(1) Else $SHOLD &= $AFSPLIT[$ICC] & Chr(1) EndIf EndIf Case 2 If StringInStr(FileGetAttrib($SPATH & "\" & $AFSPLIT[$ICC]), "d") Or StringInStr(FileGetAttrib($AFSPLIT[$ICC]), "d") Then If StringRegExp($AFSPLIT[$ICC], "\w:\\") = 0 Then $SHOLD &= $SPATH & $AFSPLIT[$ICC] & Chr(1) Else $SHOLD &= $AFSPLIT[$ICC] & Chr(1) EndIf EndIf EndSwitch Next If StringTrimRight($SHOLD, 1) Then Return StringSplit(StringTrimRight($SHOLD, 1), Chr(1)) Return SetError(4, 4, "") EndFunc |