Problem beim Anzeigen von Unterordnern

  • Normalerweise werden Unterordner ja so ermittelt:

    [autoit]

    $search=FileFindFirstFile("*.")

    [/autoit]


    Diese Methode zeigt jedoch streng genommen nur Dateien ohne Endung bzw. ohne Punkt an. In der Regel funktioniert dies auch. Sobald jedoch im Namen des Ordners ein Punkt vorkommt, fällt er aus der Ergebnisliste.
    Kennt jemand eine Möglichkeit zuverlässig alle Unterordner eines Verzeichnisses zu ermitteln?

    Einmal editiert, zuletzt von mkk (11. März 2008 um 16:24)

  • _FileListToArray habe ich ausprobiert, funktioniert auch ganz gut. Wenn ich die anderen Beiträge im Forum anschaue, wirds aber mit Unterordern in den Unterordnern extrem kompliziert.
    Ich werde mal versuchen die Pfade mit dem Dos-Kommando DIR in eine txt-Datei zu schreiben und die Datei in einen Array einzulesen. Wird wahrscheinlich das einfachste sein, es sei denn jemand kennt eine bessere Möglichkeit.

    • Offizieller Beitrag

    Ich habe mal eine ähnliche Funktion geschrieben. Habe sie jetzt mal etwas abgeändert, sodass nur Verzeichnisse angezeigt werden:

    Spoiler anzeigen
    [autoit]


    #Include <GUIConstants.au3>
    #Include <File.au3>
    #Include <Array.au3>

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

    Global $Files

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

    $fpath = FileSelectFolder('Bitte einen Ordner auswählen!', '')
    If Not @error Then
    If StringRight($fpath, 1) <> '\' Then $fpath &= '\'
    _FileListToString($fpath)
    Global $aFileList = StringSplit($Files, '|'); Array $aFileList enthält Auflistung aller Unterverzeichnisse
    _ArrayDisplay($aFileList)
    EndIf

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

    Func _FileListToString($path)
    Local $hSearch, $sFile
    $hSearch = FileFindFirstFile($path & '*.*')
    If $hSearch <> -1 Then
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then
    SetError(0)
    ExitLoop
    EndIf
    If StringInStr(FileGetAttrib($path & $sFile), "D") = 0 Then ContinueLoop
    $Files &= $path & $sFile & '\|'
    WEnd
    FileClose($hSearch)
    EndIf
    _ReFileListToString($path)
    $Files = StringTrimRight($Files, 1)
    EndFunc

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

    Func _ReFileListToString($path); Diese Funktion nicht direkt aufrufen. Wird nur von _FileListToString benutzt.
    Local $dFileList = _FileListToArray($path, '*', 2)
    If IsArray($dFileList) Then
    For $i = 1 To $dFileList[0]
    Local $hSearch, $sFile
    $hSearch = FileFindFirstFile($path & $dFileList[$i] & "\" & '*.*')
    If $hSearch <> -1 Then
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then
    SetError(0)
    ExitLoop
    EndIf
    If StringInStr(FileGetAttrib($path & $dFileList[$i] & "\" & $sFile), "D") = 0 Then ContinueLoop
    $Files &= $path & $dFileList[$i] & "\" & $sFile & '\|'
    WEnd
    FileClose($hSearch)
    EndIf
    _ReFileListToString($path & $dFileList[$i] & '\')
    Next
    EndIf
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Hi,

    ich hab mal eben dieses BSP auf die neuste Beta gehoben:

    Spoiler anzeigen
    [autoit]

    #include<ComboConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<ListViewConstants.au3>
    #include<StaticConstants.au3>
    #include<TreeViewConstants.au3>
    #include<WindowsConstants.au3>
    #include <GUIConstants.au3>
    Opt("GUIDataSeparatorChar","\")

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

    WinActivate('Ordneroptionen')
    $text = ControlGetText('Ordneroptionen', '', 30120)
    $htree = ControlGetHandle('Ordneroptionen', '', 30120)
    If IsHWnd($htree) Then ConsoleWrite("Yeah" & @CRLF)
    ;ConsoleWrite(_GUICtrlTreeView_GetTree ($htree, 1) & @CRLF)

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

    ConsoleWrite($text & @CRLF)

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

    ;Autoit3Ex.au3 v 0_16
    ; ----------------------------------------------------------------------------
    ;
    ; AutoIt Version: 3.1.1.73
    ; Author: Holger Kotsch
    ; Version: 1.1
    ;
    ; Script Function:
    ; Unfinished Explorer-like sample (Preview)
    ;
    ; !!! Self-API-created items are not supported !!!
    ;
    ; ----------------------------------------------------------------------------
    #include <GUIConstants.au3>
    #include <GUITreeView.au3>
    #include <Misc.au3>
    #include <file.au3>
    #include <Array.au3>
    #Include <GuiListView.au3>
    #region declares
    ; TV functions
    global $TotalRows=34, $nMsg,$down,$szPath,$current
    Global Const $TV2M_INSERTITEM = $TV_FIRST + 0
    Global Const $TV2M_GETITEMRECT = $TV_FIRST + 4
    Global Const $TV2M_SETIMAGELIST = $TV_FIRST + 9
    Global Const $TV2M_SETITEM = $TV_FIRST + 13
    Global Const $TV2M_HITTEST = $TV_FIRST + 17
    Global Const $TV2I_FIRST = 0xFFFF0001
    ; Masks
    Global Const $TV2IF_IMAGE = 0x0002
    Global Const $TV2IF_HANDLE = 0x0010
    Global Const $TV2IF_SELECTEDIMAGE = 0x0020
    Global Const $TV2IF_CHILDREN = 0x0040
    ; States
    Global Const $TV2IS_CUT = 0x0004
    Global Const $TV2IS_DROPHILITED = 0x0008
    Global Const $TV2IS_BOLD = 0x0010
    Global Const $TV2IS_EXPANDED = 0x0020
    ; Relationship/specific item
    Global Const $TV2GN_ROOT = 0x0000
    Global Const $TV2GN_PREVIOUS = 0x0002
    Global Const $TV2GN_FIRSTVISIBLE = 0x0005
    Global Const $TV2GN_NEXTVISIBLE = 0x0006
    Global Const $TV2GN_PREVIOUSVISIBLE = 0x0007
    Global Const $TV2GN_DROPHILITE = 0x0008
    ; Hittest infos
    Global Const $TV2HT_NOWHERE = 0x0001
    Global Const $TV2HT_ONITEMICON = 0x0002
    Global Const $TV2HT_ONITEMLABEL = 0x0004
    Global Const $TV2HT_ONITEMINDENT = 0x0008
    Global Const $TV2HT_ONITEMBUTTON = 0x0010
    Global Const $TV2HT_ONITEMRIGHT = 0x0020
    Global Const $TV2HT_ONITEMSTATEICON = 0x0040
    Global Const $TV2HT_ONITEM = BitOr($TV2HT_ONITEMICON, $TV2HT_ONITEMLABEL, $TV2HT_ONITEMSTATEICON)
    Global Const $TV2HT_ABOVE = 0x0100
    Global Const $TV2HT_BELOW = 0x0200
    Global Const $TV2HT_TORIGHT = 0x0400
    Global Const $TV2HT_TOLEFT = 0x0800
    ;If Not IsDeclared("LVM_SETEXTENDEDLISTVIEWSTYLE") Then Global Const $LVM_SETEXTENDEDLISTVIEWSTYLE = 0x1036
    If Not IsDeclared("LVM_SETCOLUMN") Then Global Const $LVM_SETCOLUMN = 0x101A
    ;If Not IsDeclared("LVCF_FMT") Then Global Const $LVCF_FMT = 0x0001
    ;If Not IsDeclared("LVCFMT_RIGHT") Then Global Const $LVCFMT_RIGHT = 0x0001
    ;If Not IsDeclared("LVM_GETHEADER") Then Global Const $LVM_GETHEADER = 0x101F
    Global $nCtrls = 0
    Global $hCurItem = 0
    Global $hImageList = 0
    Global $szDirType = RegRead("HKCR\Directory", "")
    If $szDirType = "" Then $szDirType = "Directory"
    ;$indexingGUI = GUICreate("Sorry.. Finding Folder structure!", 300, 50, (@DesktopWidth - 300) / 2, (@DesktopHeight - 50) / 2)
    ;$indexingLabel=GUICtrlCreateLabel("Sorry..Only time you'll have to wait! Please Wait...", 30, 1, 250, 25)
    ;$indexstatuslabel = GUICtrlCreateLabel("", 20, 25, 280, 20)
    ;GUISetState()
    $hGui = GUICreate("AutoIt3-Explorer V1.1a ;-)", 762, 578, -1, -1, BitOr($WS_SIZEBOX, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU))
    $nFileMenu = GUICtrlCreateMenu("&File")
    $editMenu = GUICtrlCreateMenu("&Edit")
    $nViewMenu = GUICtrlCreateMenu("&View")
    $nViewItem1 = GUICtrlCreateMenuItem("Icons", $nViewMenu, -1, 1)
    $nViewItem2 = GUICtrlCreateMenuItem("Report", $nViewMenu, -1, 1)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $nViewItem3 = GUICtrlCreateMenuItem("Small Icons", $nViewMenu, -1, 1)
    $nViewItem4 = GUICtrlCreateMenuItem("List", $nViewMenu, -1, 1)
    $nExtraMenu = GUICtrlCreateMenu("E&xtra")
    $nHelpMenu = GUICtrlCreateMenu("&?")
    $nExitItem = GUICtrlCreateMenuItem("Exit",$nFileMenu)
    $nAboutItem = GUICtrlCreateMenuItem("About",$nHelpMenu)
    GUICtrlCreateLabel("", 0, 0, 800, 2, BitOr($SS_SUNKEN, $SS_BLACKRECT))
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKHEIGHT)
    GUICtrlCreateLabel("Address", 5, 5, 50, 20)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKHEIGHT + $GUI_DOCKWIDTH)
    $nAddressbar = GUICtrlCreateCombo("C:\", 50, 3, 300, 20)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKHEIGHT)
    $Tab1combo1 = GUICtrlCreateCombo("# Rows", 400, 3, 50, 30);, $CBS_SIMPLE)
    GUICtrlSetData(-1, "10|20|34|50|100|150|300|500|1000|1200|1500|2000|3000|4000", "34") ;Set default 10
    GUICtrlCreateLabel("Rows",360, 3)
    $TopButton = GuiCtrlCreateButton("|<", 460, 3 ,30, 20)
    GUICtrlSetTip($TopButton,"$TopButton")
    $UpButton = GuiCtrlCreateButton("<", 500, 3, 30, 20)
    GUICtrlSetTip($UpButton,"$UpButton")
    GUICtrlCreateLabel("Pg Up", 580, 6,35,15)
    $updown = GUICtrlCreateInput("0", 540, 3, 35, 20)
    $UpOneScreen = GUICtrlCreateUpdown($updown)
    GUICtrlSetTip($UpOneScreen, "$UpOneScreen")
    $DownButton = GuiCtrlCreateButton(">", 620, 3, 30, 20)
    GUICtrlSetTip($DownButton,"$DownButton")
    $Bottom = GuiCtrlCreateButton(">|", 660, 3, 30, 20)
    GUICtrlSetTip($Bottom,"$Bottom")
    ;GUICtrlCreateLabel("Dn", 680, 3)
    ;$down = GUICtrlCreateInput("0", 580, 3, 35, 20)
    ;$down = GUICtrlCreateInput("0", 540, 540, 150, 18)
    ;$DownOneScreen = GUICtrlCreateUpdown($down)
    ;GUICtrlSetTip($DownOneScreen, "$DownOneScreen")
    $Value = GUICtrlCreateCombo("0", 700, 3, 55, 20);, $CBS_SIMPLE)
    GUICtrlCreateLabel("Num row", 780, 3)
    GUICtrlSetTip($Value, "Show Control cursor, hold cursor for sample label")
    $arDrives = DriveGetDrive("ALL")
    $nTreeView = GUICtrlCreateTreeView(0, 25, 310, 513, -1, $WS_EX_CLIENTEDGE)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM + $GUI_DOCKWIDTH)
    GUICtrlSetState(-1, $GUI_FOCUS)
    GUICtrlSetImage(-1, "shell32.dll", 3, 4) ;
    GUICtrlSetImage(-1, "shell32.dll", 4, 2) ;
    GUICtrlSetImage(-1, "shell32.dll", 7) ; Removable
    GUICtrlSetImage(-1, "shell32.dll", 8) ; Fixed
    GUICtrlSetImage(-1, "shell32.dll", 9) ; Network
    GUICtrlSetImage(-1, "shell32.dll", 11) ; CD-ROM
    $nListView = GUICtrlCreateListView("Name|Size|Type|Changed|No.",314, 25, 447, 513)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM)
    GUICtrlSendMsg(-1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlListView_SetColumnFormat($nListView, 1, $LVCFMT_RIGHT)
    GUICtrlListView_SetColumnFormat($nListView, 4, $LVCFMT_RIGHT)
    GUICtrlSetImage(-1, "shell32.dll", 0)
    $statusbarobj = GUICtrlCreateLabel(" Object(s)",0, 540, 150, 18, $SS_SUNKEN)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT + $GUI_DOCKWIDTH)
    $statusbarsize = GUICtrlCreateLabel(" MB (Free Space: 0 MB)", 152, 540, 610, 18, $SS_SUNKEN)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKRIGHT + $GUI_DOCKBOTTOM + $GUI_DOCKHEIGHT)
    ;$down = GUICtrlCreateInput("0", 540, 540, 35, 20)
    $down = GUICtrlCreateLabel("0", 540, 544,35,13)
    $DownOneScreen = GUICtrlCreateUpdown($down)
    GUICtrlSetTip($DownOneScreen, "$DownOneScreen")
    GUICtrlCreateLabel("Pg Dn", 580, 544,45,13)
    $nSplitter = GUICtrlCreateLabel("", 310, 29, 4, 509)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT + $GUI_DOCKTOP + $GUI_DOCKBOTTOM + $GUI_DOCKWIDTH)
    GUICtrlSetCursor(-1, 13)
    GUICtrlSetData($Tab1combo1,$TotalRows)
    GUISetState(@SW_SHOW, $hGui)
    FillTreeRoot($arDrives)
    _GUICtrlListView_SetColumnWidth ($nListView, 0, 180) ;Set Column with
    _GUICtrlListView_SetColumnWidth ($nListView, 4, 20) ;Set Column with
    UpdateWindow($nTreeView)
    $nFirstItem = 0
    $nLastItem = 0
    $nOldItem = 0
    DirToList("C:")
    $szCurrentPath = "C:"
    $szOldPath = ""
    $curx = 0
    $curpressed = 0
    $splitx1 = 48
    $splitx2 = 52
    $savex = 310
    $pressed = 0
    #endregion declares
    While 1
    $nMsg = GUIGetMsg()
    $arInfo = GUIGetCursorInfo()
    If $pressed = 1 And $arInfo[2] = 0 Then $pressed = 0
    If $pressed = 1 And $arInfo[2] = 1 Then
    $arPos = WinGetPos($hGui)
    If $arInfo[0] > 100 And $arInfo[0] < $arPos[2] - 100 Then
    If $arInfo[0] <> $savex Then
    ControlMove($hGui, "", $nSplitter, $arInfo[0] - 2, 29)
    ControlMove($hGui, "", $nTreeView, 0, 25, $arInfo[0] - 2)
    ControlMove($hGui, "", $nListView, $arInfo[0] + 2, 25, $arPos[2] - $arInfo[0] - 10)
    $savex = $arInfo[0]
    EndIf
    EndIf
    EndIf
    If $arInfo[4] = $nTreeView And $arInfo[2] And WinActive($hGui) Then
    $nFlag = 0
    $hItem = TV_Hittest($nTreeView, $nFlag)
    If BitAnd($nFlag, $TV2HT_ONITEMBUTTON) Or BitAnd($nFlag, $TV2HT_ONITEM) Then
    GUISetState(@SW_LOCK)
    CheckTreeFill($nTreeView, $hItem)
    GUISetState(@SW_UNLOCK)
    GUICtrlSetData($nAddressbar, GetTreePath($nTreeView, $hItem, "\"))
    EndIf
    $hItem = GUICtrlSendMsg($nTreeView, $TVM_GETNEXTITEM, $TVGN_CARET, 0)
    $szCurrentPath = GetTreePath($nTreeView, $hItem, "\")
    If BitAnd($nFlag, $TV2HT_ONITEM) Then GUICtrlSetData($nAddressbar, $szCurrentPath)
    If $szOldPath <> $szCurrentPath Then
    $szOldPath = $szCurrentPath
    GUISetState(@SW_LOCK)
    For $i = $nFirstItem To $nLastItem
    GUICtrlDelete($i)
    Next
    GUISetState(@SW_UNLOCK)
    ;UpdateCtrl($hGui, $nListView)
    $nFirstItem = 0
    $nLastItem = 0
    $nOldItem = 0
    GUICtrlSetData($nAddressbar, $szCurrentPath)
    GUICtrlSetCursor($nListView,1)
    GUICtrlSetCursor($nTreeView,1)
    DirToList($szCurrentPath)
    GUICtrlSetCursor($nListView,2)
    GUICtrlSetCursor($nTreeView,2)
    EndIf
    ElseIf _IsPressed("6B") And ControlGetFocus($hGui) = "SysTreeView321" Then
    $hItem = GUICtrlSendMsg($nTreeView, $TVM_GETNEXTITEM, $TVGN_CARET, 0)
    CheckTreeFill($nTreeView, $hItem)
    EndIf
    Switch $nMsg
    Case $GUI_EVENT_PRIMARYDOWN
    $pos = GUIGetCursorInfo()
    If ($pos[4] == $nListView) Then
    If ($current <> _GUICtrlListView_GetHotItem ($nListView) And _GUICtrlListView_GetHotItem ($nListView) >= 0) Then
    ;msgbox("", "Hot Item:" , _GUICtrlListView_GetHotItem ($searchlistView))
    $current = _GUICtrlListView_GetHotItem ($nListView)
    ;msgbox(0,"",_GUICtrlListView_GetItemText($searchlistView, $current, 1))
    ElseIf ($current = _GUICtrlListView_GetHotItem ($nListView) And _GUICtrlListView_GetHotItem ($nListView) >= 0) Then
    $s_NewPath=GUICtrlRead($nAddressbar)&_GUICtrlListView_GetItemText ($nListView, $current, 0)
    if not StringInStr($s_NewPath, ".") then $s_NewPath&="\"
    Run("explorer.exe /select, " & $s_NewPath , "", @SW_MAXIMIZE)
    ElseIf (_GUICtrlListView_GetHotItem ($nListView == -1)) Then
    ;msgbox("", "Hot Item:" , "None")
    EndIf
    EndIf
    Case $GUI_EVENT_CLOSE, $nExitItem
    ExitLoop
    Case $nAboutItem
    Msgbox(64,"About","Demo by Holger; modified display by Randallc")
    Case $nSplitter
    $cinfo = GUIGetCursorInfo()
    If $cinfo[2] = 1 Then $pressed = 1
    Case $nViewItem1 To $nViewItem4
    GUICtrlSetStyle($nListView, BitOr($LVS_SHOWSELALWAYS, $LVS_SINGLESEL, $nMsg - $nViewItem1))
    Case $updown
    ;MsgBox(0,"","$updown="&$nMsg)
    $i_UpRead=Number(GUICtrlRead($updown))
    $i_OldUpRead=-Number(GUICtrlRead($down))
    $nMsg = $updown
    Re_List($szPath)
    Case $UpButton
    ;MsgBox(0,"","$UpButton="&$nMsg)
    GUICtrlSetData($updown,Number(GUICtrlRead($updown))+1)
    $i_UpRead=Number(GUICtrlRead($updown))
    $i_OldUpRead=-Number(GUICtrlRead($down))
    $nMsg = $updown
    Re_List($szPath)
    Case $TopButton
    ;MsgBox(0,"","$TopButton="&$nMsg)
    GUICtrlSetData($updown,0)
    GUICtrlSetData($down,0)
    GUICtrlSetData($Value,0)
    $i_UpRead=Number(GUICtrlRead($updown))
    $i_OldUpRead=-Number(GUICtrlRead($down))
    $nMsg = $updown
    Re_List($szPath)
    GUICtrlSetData($down,0)
    GUICtrlSetData($Updown,0)
    Case $down
    ; MsgBox(0,"","$down="&$nMsg)
    $i_DownRead=Number(GUICtrlRead($down))
    $i_OldDownRead=-Number(GUICtrlRead($updown))
    if $nMsg<> $Bottom then GUICtrlSetData($down,_iif($i_DownRead<$i_OldDownRead,$i_DownRead+2,$i_DownRead-2))
    $nMsg = $down
    Re_List($szPath)
    Case $DownButton
    ;MsgBox(0,"","$DownButton="&$nMsg)
    GUICtrlSetData($down,Number(GUICtrlRead($down))-1)
    GUICtrlSetData($updown,Number(GUICtrlRead($updown))-1)
    $i_DownRead=Number(GUICtrlRead($down))
    $i_OldDownRead=-Number(GUICtrlRead($updown))
    if $nMsg<> $Bottom then GUICtrlSetData($down,_iif($i_DownRead<$i_OldDownRead,$i_DownRead+2,$i_DownRead-2))
    $nMsg = $down
    Re_List($szPath)
    Case $Bottom
    ;MsgBox(0,"","$Bottom="&$nMsg)
    GUICtrlSetData($down,0)
    GUICtrlSetData($Updown,0)
    GUICtrlSetData($Value,$TotalRows)
    $i_DownRead=Number(GUICtrlRead($down))
    $i_OldDownRead=-Number(GUICtrlRead($updown))
    if $nMsg<> $Bottom then GUICtrlSetData($down,_iif($i_DownRead<$i_OldDownRead,$i_DownRead+2,$i_DownRead-2))
    $nMsg = $down
    Re_List($szPath)
    GUICtrlSetData($down,0)
    GUICtrlSetData($Updown,0)
    Case $Tab1combo1 ,$Value , $updown , $down
    ;MsgBox(0,"","many="&$nMsg)
    ;MsgBox(0,"","$Value="&$nMsg)
    ;MsgBox(0,"","$Tab1combo1="&$nMsg)
    ;MsgBox(0,"","$down="&$nMsg)
    ;MsgBox(0,"","$updown="&$nMsg)
    Re_List($szPath)
    EndSwitch
    WEnd
    Func CheckTreeFill($nCtrl, $hItem)
    If $hItem > 0 Then
    $hChild = GUICtrlSendMsg($nTreeView, $TVM_GETNEXTITEM, $TVGN_CHILD, $hItem)
    If $hChild > 0 Then
    $szText = GetItemText($nTreeView, $hChild)
    If $szText == "" Then
    $szPath = GetTreePath($nTreeView, $hItem, "\")
    If StringRight($szPath, 1) == "\" Then $szPath = StringTrimRight($szPath, 1)
    GUICtrlSetCursor($nTreeView, 1)
    FillTree($szPath, $hItem, $hChild)
    GUICtrlSetCursor($nTreeView, 2)
    EndIF
    EndIf
    EndIf
    EndFunc ;==>CheckTreeFill
    Func FillTreeRoot($arDrives)
    Local $hSearch, $szFile, $nChildren, $szDriveLabel
    $hParent = 0
    For $i = 1 To $arDrives[0]
    $nChildren = 0
    ;MsgBox(0,"",$arDrives[$i])
    $s_Directories=@ScriptDir&"\Dir_"&StringLower(StringLeft($arDrives[$i],1))&".txt"
    ;FileDelete($s_Directories)
    filemove(@ScriptDir&"\Dir_*.*",@ScriptDir&"\backup\",9)
    If GetSubFolder($arDrives[$i]) Then $nChildren = 1
    $szType = DriveGetType($arDrives[$i])
    Switch $szType
    Case "Removable"
    $iImage = 2
    $iSelectedImage = 2
    Case "Fixed"
    $iImage = 3
    $iSelectedImage = 3
    Case "Network"
    $iImage = 4
    $iSelectedImage = 4
    Case "CDROM"
    $iImage = 5
    $iSelectedImage = 5
    Case Else
    $iImage = 0
    $iSelectedImage = 0
    EndSwitch
    If $szType = "Removable" Then
    $szText = "Removable"
    ElseIf $szType = "Network" Then
    $szLabel = DriveMapGet($arDrives[$i])
    $nPos = StringInStr($szLabel, "\", 0, -1)
    $szText = StringRight($szLabel, StringLen($szLabel) - $nPos) & " on """ & StringTrimLeft(StringLeft($szLabel, $nPos - 1), 2) & """"
    Else
    $szText = DriveGetLabel($arDrives[$i])
    EndIf
    $szDriveLabel = $szText & " (" & StringUpper($arDrives[$i]) & ")"
    $hItem = InsertItem($szDriveLabel, $hParent, $hCurItem, $nChildren, $iImage, $iSelectedImage)
    If $nChildren = 1 Then InsertDummyItem($nTreeView, $hItem)
    Next
    $hItem = GUICtrlSendMsg($nTreeView, $TVM_GETNEXTITEM, $TV2GN_ROOT, 0)
    GUICtrlSendMsg($nTreeView, $TVM_SELECTITEM, $TVGN_CARET, $hItem)
    EndFunc ;==>FillTreeRoot
    Func GetSubFolder($szPath)
    Local $hSearch, $szFile, $nChildren = 0
    $hSearch = FileFindFirstFile($szPath & "\*.*")
    If $hSearch = -1 Then Return
    While 1
    $szFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($szPath & "\" & $szFile), "D") Then
    $nChildren = 1
    ExitLoop
    EndIf
    WEnd
    FileClose($hSearch)
    Return $nChildren
    EndFunc ;==>GetSubFolder
    Func FillTree($szPath, $hParent = 0, $hDelete = 0)
    Local $hSearch, $szFile, $nChildren,$s_DirExist,$s_Directories
    If $hDelete > 0 Then
    GUICtrlSendMsg($nTreeView, $TVM_DELETEITEM, 0, $hDelete)
    SetItemChildren($hParent)
    EndIf
    local $s_AnswerFile=@ScriptDir & '\au3.txt',$s_AnswerFile2=@ScriptDir & '\au32.txt'
    $s_Switches1=" /ad /b "
    $s_Switches2=" /ad /b/s "
    $szPath=FileGetShortName($szPath)
    If (StringRight($szPath, 1) == "\") Then $szPath = StringTrimRight($szPath, 1)
    if not (StringRight($szPath, 1) == ":") Then
    ;$nPos = StringInStr($szPath, "\", 0, 2)
    ;$szPathBase=StringLeft($szPath,$nPos-1)
    ;if (StringRight($szPathBase, 1) == ":") or $nPos=0 Then $szPathBase=$szPath
    $szPathBase=$szPath
    $szPathBaseName=StringReplace(StringReplace(StringLower($szPathBase),":","_"),"\","_")
    $s_Directories=@ScriptDir&"\Dir_"&$szPathBaseName&".txt"
    if not FileExists($s_Directories) then
    $s_DirExist=0
    Else
    $s_DirExist=1
    EndIf
    EndIf
    $s_Command= ' dir ' & $szPath & '\* '&$s_Switches1 & ' > "' & $s_AnswerFile&'"'
    ;if not $s_DirExist=1 then $s_Command&= ' |dir ' & $szPath & '\* '&$s_Switches2 & ' > "' & $s_Directories&'"'
    RunWait(@ComSpec & ' /c ' & $s_Command, '', @SW_HIDE)
    if not StringRight($szPath, 1) = ":" Then
    ;MsgBox(0,"","StringRight($szPath, 1)="&StringRight($szPath, 1))
    ;MsgBox(0,"","so $s_Directories="&$s_Directories)
    $s_DirString=FileRead($s_Directories,FileGetSize($s_Directories))
    $s_DirExist=1
    EndIf
    $hSearch = FileOpen($s_AnswerFile,0)
    While 1
    $szFile=FileReadLine($hSearch)
    If @error = -1 Then ExitLoop
    $nChildren = 0
    if not StringRight($szPath, 1) = ":" and $s_DirExist=1 Then
    ;MsgBox(0,"","StringRight($szPath, 1)="&StringRight($szPath, 1))
    ;MsgBox(0,"","so $s_Directories="&$s_Directories)
    if StringInStr($s_DirString,StringReplace(StringReplace($szPath & "\" & $szFile,"\","_"),":","_")) Then $nChildren = 1
    Else
    If GetSubFolder($szPath & "\" & $szFile) Then $nChildren = 1
    EndIf
    $hItem = InsertItem($szFile, $hParent, $hCurItem, $nChildren)
    If $nChildren = 1 Then InsertDummyItem($nTreeView, $hItem)
    $nCtrls = $nCtrls + 1
    WEnd
    FileClose($hSearch)
    EndFunc ;==>FillTree
    Func FillTreeOld($szPath, $hParent = 0, $hDelete = 0)
    Local $hSearch, $szFile, $nChildren,$s_DirExist,$s_Directories
    If $hDelete > 0 Then
    GUICtrlSendMsg($nTreeView, $TVM_DELETEITEM, 0, $hDelete)
    SetItemChildren($hParent)
    EndIf
    local $s_AnswerFile=@ScriptDir & '\au3.txt',$s_AnswerFile2=@ScriptDir & '\au32.txt'
    $s_Switches1=" /ad /b "
    $s_Switches2=" /ad /b/s "
    $szPath=FileGetShortName($szPath)
    If (StringRight($szPath, 1) == "\") Then $szPath = StringTrimRight($szPath, 1)
    if not (StringRight($szPath, 1) == ":") Then
    $nPos = StringInStr($szPath, "\", 0, 2)
    $szPathBase=StringLeft($szPath,$nPos-1)
    if (StringRight($szPathBase, 1) == ":") or $nPos=0 Then $szPathBase=$szPath
    $szPathBaseName=StringReplace(StringReplace(StringLower($szPathBase),":","_"),"\","_")
    $s_Directories=@ScriptDir&"\Dir_"&$szPathBaseName&".txt"
    if not FileExists($s_Directories) then
    $s_DirExist=0
    Else
    $s_DirExist=1
    EndIf
    EndIf
    $s_Command= ' dir ' & $szPath & '\* '&$s_Switches1 & ' > "' & $s_AnswerFile&'"'
    if not $s_DirExist=1 then $s_Command&= ' |dir ' & $szPath & '\* '&$s_Switches2 & ' > "' & $s_Directories&'"'
    RunWait(@ComSpec & ' /c ' & $s_Command, '', @SW_HIDE)
    if not StringRight($szPath, 1) = ":" Then
    ;MsgBox(0,"","StringRight($szPath, 1)="&StringRight($szPath, 1))
    ;MsgBox(0,"","so $s_Directories="&$s_Directories)
    $s_DirString=FileRead($s_Directories,FileGetSize($s_Directories))
    $s_DirExist=1
    EndIf
    $hSearch = FileOpen($s_AnswerFile,0)
    While 1
    $szFile=FileReadLine($hSearch)
    If @error = -1 Then ExitLoop
    $nChildren = 0
    if not StringRight($szPath, 1) = ":" and $s_DirExist=1 Then
    ;MsgBox(0,"","StringRight($szPath, 1)="&StringRight($szPath, 1))
    ;MsgBox(0,"","so $s_Directories="&$s_Directories)
    if StringInStr($s_DirString,StringReplace(StringReplace($szPath & "\" & $szFile,"\","_"),":","_")) Then $nChildren = 1
    Else
    If GetSubFolder($szPath & "\" & $szFile) Then $nChildren = 1
    EndIf
    $hItem = InsertItem($szFile, $hParent, $hCurItem, $nChildren)
    If $nChildren = 1 Then InsertDummyItem($nTreeView, $hItem)
    $nCtrls = $nCtrls + 1
    WEnd
    FileClose($hSearch)
    EndFunc ;==>FillTree
    Func InsertItem($szText, $hParent, $hInsertAfter, $nChildren, $iImage = 0, $iSelectedImage = 1)
    $pszText = DllStructCreate("char[260]")
    DllStructSetData($pszText, 1, $szText)
    $tvItem = TVITEM()
    $tvInsertStruct = DllStructCreate("int;int;int[10]")
    If $hCurItem = 0 Then
    $hInsertAfter = $TV2I_FIRST
    Else
    $hInsertAfter = $hCurItem
    EndIf
    DllStructSetData($tvInsertStruct, 1, $hParent)
    DllStructSetData($tvInsertStruct, 2, $hInsertAfter)
    DllStructSetData($tvInsertStruct, 3, $tvItem)
    $hItem = GUICtrlSendMsg($nTreeView, $TV2M_INSERTITEM, 0, DllStructGetPtr($tvInsertStruct))
    If $hItem > 0 Then
    $hCurItem = $hItem
    DllStructSetData($tvItem, 1, BitOr($TVIF_TEXT, $TV2IF_IMAGE, $TV2IF_SELECTEDIMAGE))
    DllStructSetData($tvItem, 2, $hItem)
    DllStructSetData($tvItem, 5, DllStructGetPtr($pszText))
    DllStructSetData($tvItem, 7, $iImage)
    DllStructSetData($tvItem, 8, $iSelectedImage)
    GUICtrlSendMsg($nTreeView, $TV2M_SETITEM, 0, DllStructGetPtr($tvItem))
    EndIf
    ;;DllStructDelete($tvInsertStruct)
    ;;DllStructDelete($tvItem)
    ;;DllStructDelete($pszText)
    Return $hItem
    EndFunc ;==>InsertItem
    Func InsertDummyItem($nCtrl, $hItem)
    InsertItem("", $hItem, $hCurItem, 0)
    EndFunc ;==>InsertDummyItem
    Func TV_Hittest($nCtrl, ByRef $nFlag )
    $hItem = 0
    $point = DllStructCreate("int;int")
    DllCall("user32.dll", "int", "GetCursorPos", "ptr", DllStructGetPtr($point))
    $hWnd = ControlGetHandle("", "", $nCtrl)
    DllCall("user32.dll", "int", "ScreenToClient", "hwnd", $hWnd, "ptr", DllStructGetPtr($point))
    $tvHit = DllStructCreate("int[2];uint;int")
    DllStructSetData($tvHit, 1, DllStructGetData($point, 1), 1)
    DllStructSetData($tvHit, 1, DllStructGetData($point, 2), 2)
    If GUICtrlSendMsg($nCtrl, $TV2M_HITTEST, 0, DllStructGetPtr($tvHit)) Then
    $nFlag = DllStructGetData($tvHit, 2)
    $hItem = DllStructGetData($tvHit, 3)
    EndIf
    ;DllStructDelete($tvHit)
    ;DllStructDelete($point)
    Return $hItem
    EndFunc ;==>TV_Hittest
    Func ItemHasChildren($nCtrl, $hItem)
    $nChildren = 0
    If GUICtrlSendMsg($nCtrl, $TVM_GETNEXTITEM, $TVGN_CHILD, $hItem) > 0 Then $nChildren = 1
    Return $nChildren
    EndFunc ;==>ItemHasChildren
    Func ExpandTree($nCtrl, $hItem)
    $result = GUICtrlSendMsg($nCtrl, $TVM_EXPAND, 0x0002, $hItem)
    EndFunc ;==>ExpandTree
    Func GetTreePath($nCtrl, $hItem, $szSepChar)
    Local $szPath = "", $hParent, $hWnd, $szText
    While $hItem > 0
    $szText = GetItemText($nCtrl, $hItem)
    $hParent = GUICtrlSendMsg($nCtrl, $TVM_GETNEXTITEM, $TVGN_PARENT, $hItem)
    If $hParent = 0 Then $szText = StringRight(StringTrimRight($szText, 1), 2)
    $szPath = $szText & $szSepChar & $szPath
    $hItem = $hParent
    WEnd
    Return $szPath
    EndFunc ;==>GetTreePath
    Func GetItemText($nCtrl, $hItem)
    Local $szText = "", $pszText, $tvItem
    $pszText = DllStructCreate("char[260]")
    $tvItem = TVITEM()
    DllStructSetData($tvItem, 1, $TVIF_TEXT)
    DllStructSetData($tvItem, 2, $hItem)
    DllStructSetData($tvItem, 5, DllStructGetPtr($pszText))
    DllStructSetData($tvItem, 6, 260)
    GUICtrlSendMsg($nTreeView, $TVM_GETITEM, 0, DllStructGetPtr($tvItem))
    $szText = DllStructGetData($pszText, 1)
    ;DllStructDelete($tvItem)
    ;DllStructDelete($pszText)
    Return $szText
    EndFunc ;==>GetItemText
    Func GetItemState($nCtrl, $hItem)
    Local $nState = 0, $tvItem
    $tvItem = TVITEM()
    DllStructSetData($tvItem, 1, $TVIF_STATE)
    DllStructSetData($tvItem, 2, $hItem)
    DllStructSetData($tvItem, 4, $TVIS_STATEIMAGEMASK)
    GUICtrlSendMsg($nTreeView, $TVM_GETITEM, 0, DllStructGetPtr($tvItem))
    $nState = DllStructGetData($tvItem, 3)
    ;DllStructDelete($tvItem)
    Return $nState
    EndFunc ;==>GetItemState
    Func TVITEM()
    Return DllStructCreate("uint;int;uint;uint;ptr;int;int;int;int;int")
    EndFunc ;==>TVITEM
    Func UpdateWindow($nCtrl)
    $hWnd = ControlGetHandle("", "", $nCtrl)
    $rect = DllStructCreate("int;int;int;int")
    DllCall("user32.dll", "int", "InvalidateRect", "hwnd", $hWnd, "int", 0, "int", 0)
    EndFunc ;==>UpdateWindow
    Func SetItemChildren($hItem, $nFlag = 1)
    Local $tvItem
    $tvItem = TVITEM()
    DllStructSetData($tvItem, 1, $TV2IF_CHILDREN)
    DllStructSetData($tvItem, 2, $hItem)
    DllStructSetData($tvItem, 9, $nFlag)
    GUICtrlSendMsg($nTreeView, $TV2M_SETITEM, 0, DllStructGetPtr($tvItem))
    ;DllStructDelete ($tvItem)
    EndFunc ;==>SetItemChildren
    Func FileGetIconCount($szFile)
    Dim $nCount = 0;
    ;redim $szFile
    $LPCTSTR = DllStructCreate("char[260]")
    DllStructSetData($LPCTSTR, 1, $szFile)
    $nCount = DllCall("shell32.dll", "int", "ExtractIconEx", "ptr", DllStructGetPtr($LPCTSTR), "int", -1, "int", 0, "int", 0, "int", 0)
    $nCount = $nCount[0]
    ;DllStructDelete($LPCTSTR)
    Return $nCount
    EndFunc ;==>FileGetIconCount
    Func FileGetType($szFile)
    Dim $szRegDefault = "", $szRegType = ""
    ;redim $szFile
    $szExt = StringRight($szFile,4)
    $szRegDefault = RegRead("HKCR\" & $szExt,"")
    If $szRegDefault <> "" Then $szRegType = RegRead("HKCR\" & $szRegDefault,"")
    If $szRegType = "" Then $szRegType = $szExt & "-File"
    Return $szRegType
    EndFunc ;==>FileGetType
    Func FileGetIcon(ByRef $szIconFile, ByRef $nIcon, $szFile)
    Dim $szRegDefault = "", $szDefIcon = ""
    ;redim $szFile
    ;$nIcon = 0
    $szExt = StringRight($szFile,4)
    $szRegDefault = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" & $szExt,"ProgID")
    If $szRegDefault = "" Then $szRegDefault = RegRead("HKCR\" & $szExt,"")
    If $szRegDefault <> "" Then $szDefIcon = RegRead("HKCR\" & $szRegDefault & "\DefaultIcon","")
    If $szDefIcon = "" Then
    $szIconFile = "shell32.dll"
    ElseIf $szDefIcon <> "%1" Then
    $arSplit = StringSplit($szDefIcon,",")
    If IsArray($arSplit) Then
    $szIconFile = $arSplit[1]
    If $arSplit[0] > 1 Then $nIcon = $arSplit[2]
    Else
    Return 0
    EndIf
    EndIf
    Return 1
    EndFunc ;==>FileGetIcon
    Func GUICtrlListView_SetColumnFormat($hListView, $nCol, $nFormat)
    $hListViewHeader = GUICtrlSendMsg($hListView, $LVM_GETHEADER, 0, 0)
    $LVCOLUMN = DllStructCreate("uint;int;int;ptr;int;int;int;int")
    DllStructSetData($LVCOLUMN, 1, $LVCF_FMT)
    DllStructSetData($LVCOLUMN, 2, $nFormat)
    GUICtrlSendMsg($hListView, $LVM_SETCOLUMN, $nCol, DllStructGetPtr($LVCOLUMN))
    ;;DllStructDelete($LVCOLUMN)
    EndFunc ;==>GUICtrlListView_SetColumnFormat
    Func UpdateCtrl($hWnd, $nCtrl)
    $hCtrl = ControlGetHandle($hWnd, "", $nCtrl)
    $point = DllStructCreate("int;int")
    $rect = DllStructCreate("int;int;int;int")
    DllCall("user32.dll", "int", "GetWindowRect", "hwnd", $hCtrl, "ptr", DllStructGetPtr($rect))
    DllStructSetData($point, 1, DllStructGetData($rect, 1))
    DllStructSetData($point, 2, DllStructGetData($rect, 2))
    DllCall("user32.dll", "int", "ScreenToClient", "hwnd", $hCtrl, "ptr", DllStructGetPtr($point))
    DllStructSetData($rect, 1, DllStructGetData($point, 1))
    DllStructSetData($rect, 2, DllStructGetData($point, 2))
    DllStructSetData($point, 1, DllStructGetData($rect, 3))
    DllStructSetData($point, 2, DllStructGetData($rect, 4))
    DllCall("user32.dll", "int", "ScreenToClient", "hwnd", $hCtrl, "ptr", DllStructGetPtr($point))
    DllStructSetData($rect, 3, DllStructGetData($point, 1))
    DllStructSetData($rect, 4, DllStructGetData($point, 2))
    DllCall("user32.dll", "int", "InvalidateRect", "hwnd", $hWnd, "ptr", DllStructGetPtr($rect), "int", 1);
    ;DllStructDelete($point)
    ;DllStructDelete($rect)
    EndFunc ;==>UpdateCtrl
    Func DirToList($szPath)
    $s_MsgValue=GUICtrlRead($Value)
    local $s_AnswerFile=@ScriptDir & '\au3.txt',$s_AnswerFile2=@ScriptDir & '\au32.txt'
    $s_Switches1=" /ad /b "
    $s_Switches2=" /a-d /b "
    $szPath=FileGetShortName($szPath)
    If StringRight($szPath, 1) = "\" Then $szPath = StringTrimRight($szPath, 1)
    $s_Command= ' dir ' & $szPath & '\* '&$s_Switches1 & ' > "' & $s_AnswerFile&'"'& _
    '|dir ' & $szPath & '\* '&$s_Switches2 & ' > "' & $s_AnswerFile2 &'"'
    RunWait(@ComSpec & ' /c ' & $s_Command, '', @SW_HIDE)
    $s_StringAns=FileRead($s_AnswerFile,FileGetSize($s_AnswerFile))&FileRead($s_AnswerFile2,FileGetSize($s_AnswerFile2))
    $file = FileOpen($s_AnswerFile, 2)
    FileWrite($file,$s_StringAns)
    FileClose($file)
    $sTXTLOGFile2="Table.txt"
    Dim $hSearch, $szFile, $szDate, $szType, $nItem
    If StringRight($szPath, 1) = "\" Then $szPath = StringTrimRight($szPath, 1)
    $hSearch = FileOpen($s_AnswerFile,0)
    $nItem = -1
    $i_numItems=0
    ;====================================================CountRows
    $TotalRows=_FileCountLines( $s_AnswerFile )
    $s_IntervalString=""
    $i_IntervalCombo=$TotalRows/20
    for $i=0 to 20
    $s_IntervalString&="|"&int($i*$i_IntervalCombo)
    Next
    ;GUICtrlSetData($Value, $s_IntervalString, $TotalRows-(GUICtrlRead($Value))-1)
    ;====================================================Rows
    ;if $nMsg <> $Value and $nMsg <> $updown and $nMsg <> $down and $nMsg <> $Tab1combo1 then GUICtrlSetData($Value, $s_IntervalString, $TotalRows-(GUICtrlRead($Value))-1)
    if $nMsg <> $Value and $nMsg <> $updown and $nMsg <> $Tab1combo1 and $nmsg<> $down then GUICtrlSetData($Value, $s_IntervalString, GUICtrlRead($Value)-1)
    if $nMsg =$Value then
    GUICtrlSetData($down,0)
    GUICtrlSetData($updown,0)
    EndIf
    if $nMsg = $updown then GUICtrlSetData($down,-GUICtrlRead($updown))
    if $nMsg = $down then GUICtrlSetData($updown,-GUICtrlRead($down) )
    $i_FromUpDownT=int(number(GUICtrlRead($updown))*number(GUICtrlRead($Tab1combo1)))
    $i_FromDownT=int(number(GUICtrlRead($down))*number(GUICtrlRead($Tab1combo1)))
    $i_NewStart=number(GUICtrlRead($Value))-_iif(number(GUICtrlRead($Value))=0,0,1)-$i_FromUpDownT
    if $TotalRows-$i_NewStart<number(GUICtrlRead($Tab1combo1)) then $i_NewStart=$TotalRows-number(GUICtrlRead($Tab1combo1))
    ;====================================================Cols
    $i_TotalNumRowsToShow=GUICtrlRead($Tab1combo1)
    $i_FirstItem=$i_NewStart
    $i_ItemsNumber=$i_NewStart
    _LockAndWait2()
    While $i_numItems<$i_TotalNumRowsToShow+1
    $i_numItems+=1
    $szFile=FileReadLine($hSearch)
    If @error = -1 Then ExitLoop
    $nIcon = 0
    $szIconFile = $szPath & "\" & $szFile
    FileGetIcon($szIconFile, $nIcon, $szFile)
    $IsDir = StringInStr(FileGetAttrib($szPath & "\" & $szFile),"D")
    $szSize = ""
    If $IsDir Then
    $szType = $szDirType
    Else
    $szSize = Round(FileGetSize($szPath & "\" & $szFile) / 1000) & " KB"
    $szType = FileGetType($szFile)
    EndIf
    $arDate = FileGetTime($szPath &"\" & $szFile)
    If IsArray($arDate) Then $szDate = $arDate[2] & "." & $arDate[1] & "." & $arDate[0] & " " & $arDate[3] & ":" & $arDate[4]
    $nItem = GUICtrlCreateListViewItem($szFile & "|" & $szSize & "|" & $szType & "|" & $szDate& "|" & $i_numItems, $nListView)
    If $IsDir Then
    GUICtrlSetImage(-1,$szIconFile, 3)
    Else
    GUICtrlSetImage(-1,$szIconFile,$nIcon)
    EndIf
    If $nFirstItem = 0 Then $nFirstItem = $nItem
    WEnd
    _ResetLockWait2()
    $nLastItem = $nItem
    If $nLastItem > 0 Then
    GUICtrlSetData($statusbarobj, $nLastItem - $nFirstItem & " Objects")
    Else
    GUICtrlSetData($statusbarobj, "Ready")
    EndIf
    FileClose($hSearch)
    $s_MsgValue=GUICtrlRead($Value)
    ;MsgBox(0,"","$s_MsgValue="&$s_MsgValue)
    GUICtrlSetData($Value, 0)
    EndFunc ;==>DirToList
    Func Re_List($szPath)
    local $s_AnswerFile=@ScriptDir & '\au3.txt'
    Dim $hSearch, $szFile, $szDate, $szType, $nItem
    If StringRight($szPath, 1) == "\" Then $szPath = StringTrimRight($szPath, 1)
    $hSearch = FileOpen($s_AnswerFile,0)
    $nItem = -1
    $i_numItems=0
    ;====================================================CountRows
    $TotalRows=_FileCountLines( $s_AnswerFile )
    $s_IntervalString=""
    $i_IntervalCombo=$TotalRows/20
    for $i=0 to 20
    $s_IntervalString&="|"&int($i*$i_IntervalCombo)
    Next
    ;====================================================Rows
    if $nMsg <> $Value and $nMsg <> $updown and $nMsg <> $Tab1combo1 and $nMsg <> $down then GUICtrlSetData($Value, $s_IntervalString, $TotalRows-(GUICtrlRead($Value))-1)
    if $nMsg =$Value then
    GUICtrlSetData($down,0)
    GUICtrlSetData($updown,0)
    EndIf
    if $nMsg = $updown then GUICtrlSetData($down,-GUICtrlRead($updown))
    if $nMsg = $down then GUICtrlSetData($updown,GUICtrlRead($updown)-1 )
    $i_FromUpDownT=int(number(GUICtrlRead($updown))*number(GUICtrlRead($Tab1combo1)))
    $i_FromDownT=int(number(GUICtrlRead($down))*number(GUICtrlRead($Tab1combo1)))
    $i_NewStart=number(GUICtrlRead($Value))-_iif(number(GUICtrlRead($Value))=0,0,1)-$i_FromUpDownT
    if ($TotalRows-$i_NewStart)<number(GUICtrlRead($Tab1combo1)) then $i_NewStart=$TotalRows-number(GUICtrlRead($Tab1combo1))
    if $i_NewStart<0 then $i_NewStart=0
    ;====================================================Cols
    $i_TotalNumRowsToShow=GUICtrlRead($Tab1combo1)
    $i_FirstItem=$i_NewStart
    $i_ItemsNumber=$i_NewStart
    _LockAndWait2()
    _GUICtrlListView_DeleteAllItems ($nListView)
    While $i_numItems<$i_TotalNumRowsToShow+1
    $i_numItems+=1
    $i_ItemsNumber+=1
    $szFile=FileReadLine($hSearch,$i_ItemsNumber)
    If @error = -1 Then ExitLoop
    $nIcon = 0
    $szIconFile = $szPath & "\" & $szFile
    FileGetIcon($szIconFile, $nIcon, $szFile)
    $IsDir = StringInStr(FileGetAttrib($szPath & "\" & $szFile),"D")
    $szSize = ""
    If $IsDir Then
    $szType = $szDirType
    Else
    $szSize = Round(FileGetSize($szPath & "\" & $szFile) / 1000) & " KB"
    $szType = FileGetType($szFile)
    EndIf
    $arDate = FileGetTime($szPath &"\" & $szFile)
    If IsArray($arDate) Then $szDate = $arDate[2] & "." & $arDate[1] & "." & $arDate[0] & " " & $arDate[3] & ":" & $arDate[4]
    $nItem = GUICtrlCreateListViewItem($szFile & "|" & $szSize & "|" & $szType & "|" & $szDate& "|" &$i_ItemsNumber , $nListView)
    If $IsDir Then
    GUICtrlSetImage(-1,$szIconFile, 3)
    Else
    GUICtrlSetImage(-1,$szIconFile,$nIcon)
    EndIf
    If $nFirstItem = 0 Then $nFirstItem = $nItem
    WEnd
    _ResetLockWait2()
    $nLastItem = $nItem
    If $nLastItem > 0 Then
    GUICtrlSetData($statusbarobj, $nLastItem - $nFirstItem & " Objects")
    Else
    GUICtrlSetData($statusbarobj, "Ready")
    EndIf
    FileClose($hSearch)
    ;MsgBox(0,"","Done once at least!")
    EndFunc ;==>Re_List
    Func _LockAndWait2()
    Local $Cursor_WAIT
    GUISetState(@SW_LOCK)
    GUISetCursor($Cursor_WAIT, 1)
    EndFunc ;==>_LockAndWait2
    Func _ResetLockWait2()
    Local $Cursor_ARROW
    GUISetState(@SW_UNLOCK)
    GUISetCursor($Cursor_ARROW, 1)
    EndFunc ;==>_ResetLockWait2

    [/autoit]

    Mega

  • Vielen Dank für die Antworten, hier noch eine Alternative:
    Die folgende Lösung kommt mit dem geringsten Volumen an Code aus, indem auf einen einfachen DOS-Befehl zurückgegriffen wird: In index.txt wird hierbei die Verzeichnisstruktur ausgegeben, in index2.txt werden bestimmte Dateien mit dem Pfad zusammen eingetragen. Je nach Bedarf kann dann die entsprechende Textdatei zeilenweise in einen array eingelesen werden und mit den Angaben weiter gearbeitet werden.

    [autoit]

    #include <process.au3>
    _RunDOS ("dir /a:d /s /b > index.txt")
    _RunDOS ("dir *.bmp /s /b > index2.txt")

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

    #include <file.au3>

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

    dim $replace1
    If Not _FileReadToArray("index2.txt",$replace1) Then
    MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
    Exit
    EndIf

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

    For $x = 1 to $replace1[0] -1 ; -1, um Leerzeile am Ende auszulassen

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

    ; Beispiel-Verarbeitung:
    $result0 = StringInStr($replace1[$x], "\", 0, 2) ; Position \ nach 1 Ordner ermitteln
    $replace1[$x] = StringMid($replace1[$x], $result0+1, 999)
    $result = StringInStr($replace1[$x], "\", 0, -1) ; Position letztes \ ermitteln
    $replace1[$x] = StringMid($replace1[$x], 1, $result-1)

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

    next

    [/autoit]


    Hier wird z. B. der Pfad um den Dateinamen und den obersten Ordner verkürzt.

  • Es wird eigentlich nur ein Script, um Dateien in Unterordnern gemäß dem Namen des Ordners umzubenennen und diesen Namen vorher um Sonderzeichen und Zusätze zu bereinigen.