Treeview FileExplorer

  • Ich hab mal die Tastaturbedienung eingebaut:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiTreeView.au3>
    #include <StructureConstants.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiImageList.au3>

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

    $hGui = GUICreate('FileExplorer', 400, 400)
    $hTreeview = GUICtrlCreateTreeView(10, 10, 380, 360)
    $hWndTreeview = GUICtrlGetHandle($hTreeview)
    $hOk = GUICtrlCreateButton('Ok', 240, 375, 60, 22)
    $hCancel = GUICtrlCreateButton('Cancel', 320, 375, 60, 22)

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

    $hImage = _GUIImageList_Create(16, 16, 5, 1)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 3) ; Verzeichnis-Icon
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 110) ; Verzeichnis-Icon mit Haken
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 1) ; Datei-Icon
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 5) ; Diskette
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 7) ; Wechseldatenträger
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 8) ; Festplatte
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 11) ; CDROM
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 12) ; Netzwerklaufwerk
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 53) ; Unbekannt
    _GUICtrlTreeView_SetNormalImageList($hTreeview, $hImage)

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

    GUISetState()
    GUICtrlSetStyle($hTreeview, Default, $WS_EX_COMPOSITED + $WS_EX_CLIENTEDGE)

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

    $aDrives = DriveGetDrive('ALL')
    ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
    For $i = 1 To $aDrives[0]
    $iLWindex = 0
    Switch DriveGetType($aDrives[$i])
    Case 'Fixed'
    $iLWindex = 5
    Case 'CDROM'
    $iLWindex = 6
    Case 'RAMDisk'
    $iLWindex = 7
    Case 'Removable'
    $iLWindex = 4
    If StringLeft($aDrives[$i], 2) = 'a:' Or StringLeft($aDrives[$i], 2) = 'b:' Then $iLWindex = 3
    Case Else
    $iLWindex = 8
    EndSwitch
    $hRoot = _GUICtrlTreeView_Add($hTreeview, $hTreeview, StringUpper($aDrives[$i]), $iLWindex, $iLWindex)
    If DriveStatus($aDrives[$i]) <> 'READY' Then ContinueLoop
    _GUICtrlTreeView_BeginUpdate($hTreeview)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hRoot, $aDrives[$i], 1)
    _GUICtrlTreeView_EndUpdate($hTreeview)
    Next
    ToolTip('')

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

    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $hCancel
    Exit
    Case $hOk
    $iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $iSelect), '|', '\')
    MsgBox(0, 'Selected Path/File', $sTree)
    EndSwitch
    WEnd

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

    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo, $ItemText, $wVKey

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndTreeview
    Switch $iCode
    Case $NM_DBLCLK ;Doppelklick (linke Maustaste)

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

    Case $NM_CLICK ;linke Maustaste
    ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
    _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    ToolTip('')
    Case $NM_RCLICK ; rechte Maustaste

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

    Case $NM_RDBLCLK ;Doppelklick (rechte Maustaste)

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

    Case $TVN_KEYDOWN
    Local $tagLVKEYDOWN = $tagNMHDR & "; USHORT wVKey; UINT flags;"

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

    $tNMHDR = DllStructCreate($tagLVKEYDOWN, $ilParam)
    $wVKey = DllStructGetData($tNMHDR, "wVKey")
    ;ConsoleWrite ($wVKey & " " &@CRLF)
    Switch $wVKey
    Case 40 ;runter

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

    Case 38 ;hoch

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

    Case 37; rechte Pfeiltaste

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

    Case 39 ;linke Pfeiltaste
    ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
    _GUICtrlTreeView_FileExplorer($hGui, $hTreeview, False)
    ToolTip('')
    EndSwitch
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY

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

    Func _GUICtrlTreeView_FileExplorer($hGui, $hTreeview, $mode = True)
    Local $aTVPos, $aPos, $hItem, $hChild, $sTree
    $aTVPos = ControlGetPos($hGui, '', $hTreeview)
    Switch $mode
    Case True
    $aPos = GUIGetCursorInfo($hGui)
    $hItem = _GUICtrlTreeView_HitTestItem($hTreeview, $aPos[0], $aPos[1] - $aTVPos[1])
    If _GUICtrlTreeView_GetExpanded($hTreeview, $hItem) Then Return
    Case False
    $hItem = _GUICtrlTreeView_GetSelection($hTreeview)
    If _GUICtrlTreeView_GetExpanded($hTreeview, $hItem) Then Return

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

    EndSwitch
    $hChild = _GUICtrlTreeView_GetFirstChild($hTreeview, $hItem)
    If $hChild <> 0 Then
    _GUICtrlTreeView_BeginUpdate($hTreeview)
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
    Do
    $hChild = _GUICtrlTreeView_GetNextChild($hTreeview, $hChild)
    If $hChild <> 0 Then
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    $iTimer = TimerInit()
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
    EndIf
    Until $hChild = 0
    _GUICtrlTreeView_EndUpdate($hTreeview)
    EndIf
    EndFunc ;==>_GUICtrlTreeView_FileExplorer

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

    Func _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hItem, $sPath, $iRec)
    Local $aDirList, $aFileList, $tmp
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $iRec -= 1
    $aDirList = _MyFileListToArray($sPath, 2)
    If IsArray($aDirList) Then
    For $sDir In $aDirList
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sDir, 0, 1)
    If $iRec > 0 Then _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $tmp, $sPath & $sDir, $iRec)
    Next
    EndIf
    $aFileList = _MyFileListToArray($sPath, 1)
    If IsArray($aFileList) Then
    For $sFile In $aFileList
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 2, 2)
    Next
    EndIf
    EndFunc ;==>_GUICtrlTreeView_FileExplorerRecursive

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

    Func _MyFileListToArray($sPath, $iFlag)
    Local $sFileList = '', $hSearch, $sFile
    $hSearch = FileFindFirstFile($sPath & '*')
    If @error Then Return
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If ($iFlag + @extended = 2) Then ContinueLoop
    $sFileList &= $sFile & '|'
    WEnd
    FileClose($hSearch)
    If $sFileList = '' Then Return
    Return StringSplit(StringTrimRight($sFileList, 1), '|', 2)
    EndFunc ;==>_MyFileListToArray

    [/autoit]

    Vielleicht wars das ja schon 8)

  • Ok... Das sieht schonmal Gut aus nuts!!

    Werd mal gucken, ob ich den Fehler jetzt nochmal hervorrufen kann...:)

    Meld mich nochmal!

  • Also das hier ist das Script, dass ich jetzt habe:

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.1
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #Include <Array.au3>

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

    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiTreeView.au3>
    #include <StructureConstants.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("guiOnEventMode", 1)

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

    $hGui = GUICreate('FileExplorer', 400, 400)
    GUISetOnEvent(-3, "_exit")
    $hTreeview = GUICtrlCreateTreeView(10, 10, 380, 360)
    $hWndTreeview = GUICtrlGetHandle($hTreeview)
    $hOk = GUICtrlCreateButton('Ok', 240, 375, 60, 22)
    $hCancel = GUICtrlCreateButton('Cancel', 320, 375, 60, 22)

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

    ;erstelle KontextMenü...
    $cm_process = GUICtrlCreateContextMenu($hTreeview)
    GUICtrlCreateMenuitem("RUN", $cm_process)
    GUICtrlSetOnEvent(-1, "_Run")
    GUICtrlCreateMenuitem("", $cm_process)
    GUICtrlCreateMenuitem("Cut Out", $cm_process)
    GUICtrlSetOnEvent(-1, "_CutOut")
    GUICtrlCreateMenuitem("Copy", $cm_process)
    GUICtrlCreateMenuitem("Paste", $cm_process)
    GUICtrlCreateMenuitem("", $cm_process)
    GUICtrlCreateMenuitem("Delete", $cm_process)
    GUICtrlSetOnEvent(-1, "_Delete")
    GUICtrlCreateMenuitem("Rename", $cm_process)
    GUICtrlSetOnEvent(-1, "_rename")
    $unter_New = GUICtrlCreateMenu("New", $cm_process)
    GUICtrlCreateMenuitem("Folder", $unter_New)
    GUICtrlSetOnEvent(-1, "_createFolder")
    GUICtrlCreateMenuitem("Link", $unter_New)
    GUICtrlSetOnEvent(-1, "_createLINK")
    GUICtrlCreateMenuitem("", $cm_process)
    GUICtrlCreateMenuitem("Properties", $cm_process)

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

    ;Zuordnung der Icons...
    $hImage = _GUIImageList_Create(16, 16, 5, 1)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 3) ; Verzeichnis-Icon 0 0
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 110) ; Verzeichnis-Icon mit Haken 1
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 1) ; Word-Dokument 2
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 5) ; Diskette 3
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 7) ; Wechseldatenträger 4
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 8) ; Festplatte 5
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 11) ; CDROM 6
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 12) ; Netzwerklaufwerk 7
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 53) ; Unbekannt 8
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 69) ; *.Ini 9
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 70) ; TEXT-Datei 10
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 72) ; TEXT-Datei 11
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 2) ; *.exe Datei 12
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 301) ; *.JPG, GIF, PNG, TIFF Datei 13
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 115) ; Film-Datei 14
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 116) ; Musik-Datei 15
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 188) ; Musik-Datei 16
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 14) ; HTML-Code 17
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 0) ; Unbekannte Datei 18
    _GUICtrlTreeView_SetNormalImageList($hTreeview, $hImage)

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

    GUISetState()
    GUICtrlSetStyle($hTreeview, Default, $WS_EX_COMPOSITED + $WS_EX_CLIENTEDGE)

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

    ;Ab hier ist ButtonFunktion....
    $aDrives = DriveGetDrive('ALL') ;Übertragen ;
    ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
    _GUICtrlTreeView_BeginUpdate($hTreeview)
    For $i = 1 To $aDrives[0]
    Sleep(20)

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

    $iLWindex = 0
    ;Wähle Symbol aus, welches unten dann verknüpft wird...
    Switch DriveGetType($aDrives[$i]) ;Übertragen ;
    Case 'Fixed'
    $iLWindex = 5
    Case 'CDROM'
    $iLWindex = 6
    Case 'RAMDisk'
    $iLWindex = 7
    Case 'Removable'
    $iLWindex = 4
    If StringLeft($aDrives[$i], 2) = 'a:' Or StringLeft($aDrives[$i], 2) = 'b:' Then $iLWindex = 3
    Case Else
    $iLWindex = 8
    EndSwitch
    ;Füge Eintrag in Liste hinzu...
    $hRoot = _GUICtrlTreeView_Add($hTreeview, $hTreeview, StringUpper($aDrives[$i]), $iLWindex, $iLWindex)
    If DriveStatus($aDrives[$i]) <> 'READY' Then ContinueLoop ;Übertragen ;
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hRoot, $aDrives[$i], 1)
    Next
    Sleep(500)
    _GUICtrlTreeView_EndUpdate($hTreeview)
    ToolTip('')

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

    ;Rüft '_WM_NOTIFY' auf, wenn auf + geklickt...
    $GMsgErr = GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    If $GMsgErr = 0 Then MsgBox(0,"Explorer", "GuiRegisterMsg Fehler!")

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

    While Sleep(20)

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

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE, $hCancel
    Exit
    Case $hOk
    EndSwitch
    WEnd

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

    Func _exit()
    Exit
    EndFunc

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

    Func _run()
    $iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $iSelect), '|', '\')
    MsgBox(0, 'Selected Path/File', $sTree)
    EndFunc

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

    Func _CutOut()
    $iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $iSelect), '|', '\')
    _GUICtrlTreeView_SetState($hTreeview, $iSelect, $TVIS_CUT)
    MsgBox(0,"","Setze jetzt wieder Status: Normal!")
    _GUICtrlTreeView_SetState($hTreeview, $iSelect, $TVIS_CUT, 0)
    EndFunc

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

    Func _delete()
    $iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
    _GUICtrlTreeView_Delete($hTreeview, $iSelect)
    EndFunc

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

    Func _rename()
    $iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
    _GUICtrlTreeView_SetText($hTreeview, $iSelect, 'HAAAAAAALLLOOO')
    EndFunc

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

    Func _createFolder()
    $iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
    _GUICtrlTreeView_AddChild($hTreeview, $iSelect, 'HAAAAAAALLLOOO', 0, 1)
    ;Plus vorm Ordner hinzufügen...
    ; _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    EndFunc ;Erstelle neuen Ordner und Erzeuge + vor Ordner! (als zeichen des Unterordners)

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

    Func _createLINK()
    $iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
    _GUICtrlTreeView_AddChild($hTreeview, $iSelect, 'HAAAAAAALLLOOO.lnk', 2, 2)
    ;Plus vorm Ordner hinzufügen...
    ; _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    EndFunc ;Erstelle neuen LINK und Erzeuge + vor Ordner! (als zeichen des Unterordners)

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

    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iCode, $tNMHDR, $aPos_
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
    $iCode = DllStructGetData($tNMHDR, 'Code')
    $aPos_ = MouseGetPos()
    If $iCode = -5 Then
    If ControlClick($hGui, '', $hTreeview, 'primary', 2, $aPos_[0], $aPos_[1] - 10) And Sleep(50) Then MouseClick('right')
    Sleep(20)
    EndIf
    Switch $hWndFrom
    Case $hWndTreeview
    Switch $iCode
    Case $NM_DBLCLK ;Doppelklick (linke Maustaste)

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

    Case $NM_CLICK ;linke Maustaste
    ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
    _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    ToolTip('')
    Case $NM_RCLICK ; rechte Maustaste

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

    Case $NM_RDBLCLK ;Doppelklick (rechte Maustaste)

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

    Case $TVN_KEYDOWN
    Local $tagLVKEYDOWN = $tagNMHDR & "; USHORT wVKey; UINT flags;"

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

    $tNMHDR = DllStructCreate($tagLVKEYDOWN, $ilParam)
    $wVKey = DllStructGetData($tNMHDR, "wVKey")
    ;ConsoleWrite ($wVKey & " " &@CRLF)
    Switch $wVKey
    Case 40 ;runter

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

    Case 38 ;hoch

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

    Case 37; rechte Pfeiltaste

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

    Case 39 ;linke Pfeiltaste
    ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
    _GUICtrlTreeView_FileExplorer($hGui, $hTreeview, False)
    ToolTip('')
    EndSwitch
    EndSwitch
    EndSwitch

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

    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY

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

    Func _GUICtrlTreeView_FileExplorer($hGui, $hTreeview, $mode = True)
    Local $aTVPos, $aPos, $hItem, $hChild, $sTree
    $aTVPos = ControlGetPos($hGui, '', $hTreeview)
    Switch $mode
    Case True
    $aPos = GUIGetCursorInfo($hGui)
    $hItem = _GUICtrlTreeView_HitTestItem($hTreeview, $aPos[0], $aPos[1] - $aTVPos[1])
    If _GUICtrlTreeView_GetExpanded($hTreeview, $hItem) Then Return
    Case False
    $hItem = _GUICtrlTreeView_GetSelection($hTreeview)
    If _GUICtrlTreeView_GetExpanded($hTreeview, $hItem) Then Return

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

    EndSwitch
    $hChild = _GUICtrlTreeView_GetFirstChild($hTreeview, $hItem)
    If $hChild <> 0 Then
    _GUICtrlTreeView_BeginUpdate($hTreeview)
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
    Do
    $hChild = _GUICtrlTreeView_GetNextChild($hTreeview, $hChild)
    If $hChild <> 0 Then
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    $iTimer = TimerInit()
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
    EndIf
    Until $hChild = 0
    _GUICtrlTreeView_EndUpdate($hTreeview)
    EndIf
    EndFunc ;==>_GUICtrlTreeView_FileExplorer

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

    Func _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hItem, $sPath, $iRec)
    Local $aDirList, $aFileList, $tmp
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $iRec -= 1
    $aDirList = _MyFileListToArray($sPath, 2)
    ;Erstelle + wenn unterverzeichnisse Vorhanden...
    If IsArray($aDirList) Then ;Ordner Hinzufügen
    For $sDir In $aDirList
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sDir, 0, 1)
    If $iRec > 0 Then _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $tmp, $sPath & $sDir, $iRec)
    Next
    EndIf
    $aFileList = _MyFileListToArray($sPath, 1)
    If IsArray($aFileList) Then ;Dateien Hinzufügen
    For $sFile In $aFileList
    Switch StringRight($sFile, 4)
    Case '.doc', '.rtf'
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 2, 2)
    Case '.ini'
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 9, 9)
    Case '.txt', '.log'
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 10, 10)
    Case '.sys', '.inf'
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 11, 11)
    Case '.exe'
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 12, 12)
    Case '.jpg', '.gif', '.png', '.tif', '.bmp', '.ico'
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 13, 13)
    Case '.AVI', '.WMV', '.VOB', '.DIF', '.MOV', '.MPG', '.MPE', '.M1V', '.M2V', '.MPV', '.M4V', '.MP4', '.ASF', '.AVS', '.IVF', '.MKV', '.3GP', '.3G2', '.MOD', '.NSV', '.NUV', '.NUT', '.FLI', '.FLC', '.FLX', '.FLV', '.FFM', '.SWF', '.AVI', '.MPG', '.WMV', '.FLV'
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 14, 14)
    Case '.MP3', '.RMM', '.RAM', '.RPM', '.WAV', '.OGG', '.CDA', '.APE', '.APL', '.MPP', '.MPC', '.MP+', '.WMA', '.AAC', '.M4A', '.MP4', '.TTA', '.OFR', '.SPX', '.MOD', '.MTM', '.UMX', '.MP3', '.WMA', '.WAV', '.OGG', '.AAC', '.MP4', '.MPC', '.APE'
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 15, 15)
    Case '.iso', '.mds', '.mdx', '.b5t', '.b6t', '.bwt', '.ccd', '.cue', '.isz', '.nrg', '.pdi', '.cdi', '.tib'
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 16, 16)
    Case '.htm'
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 17, 17)
    Case Else
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 18, 18)
    EndSwitch
    Next
    EndIf
    EndFunc ;==>_GUICtrlTreeView_FileExplorerRecursive

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

    Func _MyFileListToArray($sPath, $iFlag) ;Funktion muss Beim Server Laufen!
    Local $sFileList = '', $hSearch, $sFile
    $hSearch = FileFindFirstFile($sPath & '*') ;Übertragen ;
    If @error Then Return ;Irgendwie...
    While True
    $sFile = FileFindNextFile($hSearch) ;Übertragen
    If @error Then ExitLoop ;Irgendwie...
    If ($iFlag + @extended = 2) Then ContinueLoop ;Irgendwie...
    $sFileList &= $sFile & '|'
    WEnd
    FileClose($hSearch) ;Muss Beim Server angewand werden!
    If $sFileList = '' Then Return
    Return StringSplit(StringTrimRight($sFileList, 1), '|', 2)
    EndFunc ;==>__FileListToArray

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

    und nach 20 maligen Öffnen von Ordnern wurde dann irgendein ordner (auf C:\) NICHT mit dem '+' angezeigt, OBWOHL dieser viele Daten hatte... KEINE AHNUNG WARUM, doch vielleicht liegt es an meinem Script, das ich hier gepostet habe...

    Vielleicht fällt euch ja was komisches auf... :?:

    EDIT:
    Soll ich nen Video aufnehmen oder könnt ihr euch vorstellen, WANN der Fehler auftritt...??

    Edit Oscar: Spoiler hinzugefügt.

    2 Mal editiert, zuletzt von Oscar (16. November 2010 um 16:01)

  • will dir ja jetzt nichts unterstellen, aber wenn ich das script compile meldet antivira ein "Trojaniches Pferd"
    fehler, oder wahrheit?

  • Hi Oscar!

    Ich hätt da noch ein vorschlag u. o. verbesserung!

    Bilder sagen alles!
    autoit.de/wcf/attachment/11666/

    um dises aus den weg zu gehn die [ REPARSE POINT ] Abfrage einbauen.
    Skript von @progandy

    [autoit]

    Func ReparsePoint($FLS);[user='200143']progandy[/user]
    Dim Static $K32 = DllOpen('kernel32.dll')
    Dim $DA = DllCall($K32, 'dword', 'GetFileAttributesW', 'wstr', $FLS)
    If (@error) Then Return SetError(0, @error, 0)
    Return BitAND($DA[0], 1024) = 1024
    EndFunc ;==>GetFileAttributes

    [/autoit]

    Lg Kleiner

  • Hey Kleiner: Wie würde denn dann das Vollständige Script aussehen??
    ...Vielleicht geht dann auch mein Fehler weg...;)

    Kannst du es mal Posten..?

  • Hi!


    Du kannst dir die Rechte Vergeben, und bei den Personen laufen die Skripte im Kries! ^^
    Zum beispiel meine _FileListToRekursiv läuft den ganzen tag wenn ich diese Prüfung nicht eingebaut hät gut für dem Ottonormal. . . sind die Funktionen ausreichend bie mir würden die Skripte niemals zum ende kommen o. halt fehler Produzieren.
    Sogar die Auflistung mit Obj läuft sich nen Heisen! ^^


    Lg Kleiner

  • Hi!

    Klappt super, eins würde ich in dein Start Post nicht schreiben," Verknüpfungen werden nicht angezeigt"! :whistling:
    Lieber Symbolische Links die als Reparse Points bekannt sind werden nicht Angezeigt! ;)

    Lg Kleiner

  • ... auf auf die Gefahr hin, dass ich alleine den Fehler nur habe...

    .... und auch beim aktuell gepostetem Script von dir Oscar: der fehler ist immernoch da! Man bekommt machmal bei Öffnen eines Ordners keine unterordner mit "+" angezeigt...

    Ich kann es mir nur so erklähren, dass er nicht immer kontrolliert, ob es unterordner überhaupt gibt...! Wie komme ich darauf: es geht extrem schnell mit dem Öffnen von solchen Ordnern-....

    Ich denke er überspringt einfach die Funktion, die geladen wird, wenn man auf eben DIESES '+' klickt!


    ...habs auf xp - 7 und Vista probiert...
    gibts dafür ne lösung oder is das son autoit-fehler...?

  • Hi!


    Leg doch eine Console-ausgabe dazwischen schau mal ob die datein eingelesen werden wenn ja weiter Prüfung in der Rekrusiven darstellung! wenn du keine Fehle findes können wir von hir aus nich viel machen, Programieren ist eiene Wissenschaft ^^ schau mal auf eigner weise du wirst die Lösung finden und uns bescheit geben!


    Lg Kleiner

    • Offizieller Beitrag

    @Mr_gitarre: Bei mir tritt der, von Dir beschriebene, Fehler nicht auf (weder unter WinXP noch unter Win7). Wenn der Fehler nur bei Dir auftritt, musst Du schonmal bei Dir (Deinem Rechner) nach den Ursachen suchen. :huh:

    Manchmal ist nicht mal AutoIt Schuld an solchen Fehlern, siehe: Refreshfehler bei _ArrayDisplay :pinch:

  • ok, folgendes...

    Ich mach nen eigenes Thema auf, weil ich es auf arbeit, bei meiner freundin und bei mir zushause ( verschiedene Rechner mit verschiedenen Betriebssstemen) probiert habe...! Der fehler kommt! Selten, aber er kommt...!!! Und ich finde ihn nicht!

    wer will kann mir helfen, wäre dankbar für jede hilfe... werde auch nen film drehen... --->ICH FINDE DIESEN FEHLER!!! <-----

    ps: Link zum thema poste ich ;)

    Edit:

    LINK

    Einmal editiert, zuletzt von Mr_gitarre (15. November 2010 um 13:34)