Treeview FileExplorer

    • Offizieller Beitrag

    Das rekursive einlesen des Inhaltsverzeichnisses einer ganzen Festplatte kann ja recht lange dauern. Wenn man dieses aber in einem Treeview haben will, dann gibt es nur diese Möglichkeit oder man liest das Verzeichnis ebenenweise (eine Verzeichnisebene nach der anderen) ein.
    Aber immer nur eine Ebene sieht nicht so toll aus, weil dann die Verzeichnisse kein Plus-Button haben (als Kennzeichen dafür, dass der Ordner nicht leer ist). Also muss man mindestens zwei Ebenen rekursiv einlesen und das ist (bzw. war :D ) gar nicht so einfach.

    Edit 18.12.2019:

    Ich hatte dieses alte Script ganz vergessen. Zum einlesen eines Verzeichnisses habe ich bereits eine bessere Version geschrieben ("New_SelectFilesOrFolder.au3" im Anhang).

    - Die zeigt die richtigen Icons zu den Dateien/Verzeichnissen an.

    - Man kann ein Verzeichnis oder eine/mehrere Datei(en) markieren.

    - Es gibt einen animierten Warte-Mauszeiger.

    - Der ausgewählte Pfad wird oben angezeigt.

    Edit 19.11.2010:
    - Es gab noch einen Bug mit ansonsten leeren Verzeichnissen, in denen sich aber Reparse Points befinden (z.B. "c:\Users\Default\Documents\"). Die Überprüfung mit IsArray war da etwas suboptimal. ^^

    Edit 19.11.2010:
    - Bei den symbolischen Links gab es noch einen Bug. Entfernt! (Danke, Kleiner!)
    - Es werden nun die Einstellungen zu versteckten Dateien und geschützten Systemdateien aus dem Explorer übernommen.

    Edit 18.11.2010: Geänderte Erkennung der Pluszeichen, womit jetzt auch die Tastatursteuerung möglich ist! (Danke, Großvater!)

    Edit 07.11.2010: Symbolische Links (Reparse Points) werden nicht Angezeigt! (Danke, Kleiner!)

    _GUICtrlTreeView_FileExplorer:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiTreeView.au3>
    #include <StructureConstants.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Global $hGui = GUICreate('FileExplorer', 400, 400)

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

    Global Const $Delim = '\', $Delim1 = '|'

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

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

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

    Global $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, BitOR($WS_EX_COMPOSITED, $WS_EX_CLIENTEDGE))

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

    If ToolTip('Please wait...', Default, Default, 'Read Directory', 1) Then Local $aDrives = DriveGetDrive('ALL'), $iLWindex, $hRoot
    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
    If _GUICtrlTreeView_BeginUpdate($hTreeview) And _GUICtrlTreeView_FileExplorer($hTreeview, $hRoot, $aDrives[$i]) Then _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
    MsgBox(0, 'Selected Path/File', StringReplace(_GUICtrlTreeView_GetTree($hTreeview, _GUICtrlTreeView_GetSelection($hTreeview)), $Delim1, $Delim))
    EndSwitch
    WEnd

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

    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hChild, $hITEM, $tNMTREEVIEW = DllStructCreate($tagNMTREEVIEW, $ilParam)
    If DllStructGetData($tNMTREEVIEW, 'hWndFrom') = $hWndTreeview Then
    Switch DllStructGetData($tNMTREEVIEW, 'Code')
    Case $TVN_ITEMEXPANDINGA, $TVN_ITEMEXPANDINGW
    Switch DllStructGetData($tNMTREEVIEW, 'Action')
    Case $TVE_EXPAND
    If ToolTip('Please wait...', Default, Default, 'Read Directory', 1) Then $hITEM = DllStructGetData($tNMTREEVIEW, 'NewhItem')
    If _GUICtrlTreeView_GetExpanded($hTreeview, $hITEM) Then Return $GUI_RUNDEFMSG
    $hChild = _GUICtrlTreeView_GetFirstChild($hTreeview, $hITEM)
    If Not $hChild Then Return $GUI_RUNDEFMSG
    If _GUICtrlTreeView_BeginUpdate($hTreeview) Then _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    _GUICtrlTreeView_FileExplorer($hTreeview, $hChild, StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), $Delim1, $Delim))
    Do
    $hChild = _GUICtrlTreeView_GetNextChild($hTreeview, $hChild)
    If Not $hChild Then ExitLoop
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    _GUICtrlTreeView_FileExplorer($hTreeview, $hChild, StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), $Delim1, $Delim))
    Until False
    If _GUICtrlTreeView_EndUpdate($hTreeview) Then ToolTip('')
    EndSwitch
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY

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

    Func _GUICtrlTreeView_FileExplorer($hTreeview, $hITEM, $sPath)
    Local $sFileList, $sFolderList, $aDirList, $hSearch, $sFile
    Local $iHidden = RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced', 'Hidden') - 1
    Local $iSuperHidden = Not RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced', 'ShowSuperHidden')
    $hSearch = FileFindFirstFile($sPath & $Delim & '*')
    If $hSearch = -1 Then Return True
    Do
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    Switch @extended
    Case False
    If $iHidden And StringInStr(FileGetAttrib($sPath & $Delim & $sFile), 'H') Then ContinueLoop
    If $iSuperHidden And StringInStr(FileGetAttrib($sPath & $Delim & $sFile), 'S') Then ContinueLoop
    $sFileList &= $sFile & $Delim1
    Case True
    If _IsReparsePoint($sPath & $Delim & $sFile) Then ContinueLoop
    $sFolderList &= $sFile & $Delim1
    EndSwitch
    Until False
    FileClose($hSearch)
    If $sFolderList & $sFileList = '' Then Return True
    $aDirList = StringSplit(StringTrimRight($sFolderList & $sFileList, 1), $Delim1, 2)
    For $sFile In $aDirList
    If StringInStr(FileGetAttrib($sPath & $Delim & $sFile), 'D') Then
    _GUICtrlTreeView_AddChild($hTreeview, $hITEM, $sFile, 0, 1)
    Else
    _GUICtrlTreeView_AddChild($hTreeview, $hITEM, $sFile, 2, 2)
    EndIf
    Next
    Return True
    EndFunc ;==>_GUICtrlTreeView_FileExplorer

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

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

    [/autoit]
  • Das sieht doch wirklich schön aus :)
    Nur hab ich soetwas ähnliches schonmal gesehen ... ;)
    Im englischen Forum : http://www.autoitscript.com/forum/index.php?showtopic=80041
    Aber deins sieht erstmal übersichtlicher und einfacher zu bedienen aus :thumbup:

    mfg
    Ludwig

    P.S.: Hab deins mal gerade getestet und :pinch: es ist deutlich langsamer als die Version die ich oben genannt habe. Wenn ich z.B. in meinen Windows-Ordner wechsle (der sooooo groß nun auch nicht ist) dann braucht deins doche ziemlich lange.

    P.P.S.:Oh, deins liest auch noch die Dateinamen ein ... okay dann ist es doch relativ schnell :thumbup:

    //Edit: Und du solltest den Unterordner nur beim Expanden laden, weil der das sonst immer macht, wenn man den auch nur anklickt und wenn man ihn dann erweitert (auf das + oder doppelklick) dann muss er das alles nochmal laden. Und wenn da schon die Dateien drin sind könntest du auch noch versuchen, die Dateiicons richtig zu machen.

    Einmal editiert, zuletzt von Ludwig (18. Januar 2010 um 20:09)

  • Nicht schlecht. :thumbup:

    Progandy hat sowas mal fürs Listview gepostet, finde nur den Thread dazu nichtmehr.
    Ich hoffe diese Version ist relativ untouched, da ich davon ziemlich viele Abwandlungen (einige ziemlich vermurkste :D) gespeichert habe.
    Ist ziemlich flott, möglicherweise kann Oscars Variante aber mehr. ?(

    Spoiler anzeigen
    [autoit]


    ;#BETA
    #include <GuiImageList.au3>
    #include <GUIListView.au3>

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

    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>

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

    Global Const $tagSHFILEINFO = "dword hIcon; int iIcon; DWORD dwAttributes; CHAR szDisplayName[255]; CHAR szTypeName[80];"
    Global Const $SHGFI_USEFILEATTRIBUTES = 0x10
    Global Const $SHGFI_SYSICONINDEX = 0x4000
    Global Const $SHGFI_SMALLICON = 0x1
    Global Const $SHGFI_LARGEICON = 0x0

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

    Global Const $FOLDERUP_ICON_INDEX = _GUIImageList_AddIcon(_GUIImageList_GetSystemImageList(), @SystemDir & "\shell32.dll", 132)
    Global Const $FOLDER_ICON_INDEX = _GUIImageList_GetFileIconIndex(@SystemDir, 0, 1)
    Global Const $NOICON_ICON_INDEX = _GUIImageList_GetFileIconIndex("nb lgl", 0, 0)

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

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=D:\Dokumente\Dateien von Andreas\AutoIt3\FTP\GUI_MAIN.kxf
    Global $GUI_MAIN = GUICreate("Au3FTP", 882, 586, 193, 125)
    GUISetOnEvent(-3, "GUI_Close")

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

    Global $inpLocalDirectory = GUICtrlCreateInput("", 8, 28, 369, 20, $ES_READONLY)
    Global $ListView1 = GUICtrlCreateListView("Name|Datum|Größe", 8, 48, 369, 489)

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

    Global $SHELLLISTVIEWHANDLE = GUICtrlGetHandle($ListView1) ; Get the Handle

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

    GUICtrlSendMsg($ListView1, 0x101E, 0, 200)
    GUICtrlSendMsg($ListView1, 0x101E, 1, 75)
    GUICtrlSendMsg($ListView1, 0x101E, 2, 50)
    GUIRegisterMsg($WM_NOTIFY, "_SHLV_WM_NOTIFY")

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

    _GUICtrlListView_SetImageList($ListView1, _GUIImageList_GetSystemImageList(), 1)
    Global $DIRECTORY_LOCAL = "" ; Start with Selection of drives (IMG:http://www.autoitscript.com/forum/style_em…utoit/smile.gif)
    _SHLV_PopulateLocalListView($SHELLLISTVIEWHANDLE, $DIRECTORY_LOCAL)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd

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

    Func GUI_Close()
    Exit
    EndFunc ;==>GUI_Close

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

    ; Prog@ndy
    Func _SHLV_PopulateLocalListView($hListView1, ByRef $DIRECTORY_LOCAL)
    If Not IsHWnd($hListView1) Then $hListView1 = GUICtrlGetHandle($hListView1)
    If $DIRECTORY_LOCAL = "" Then
    Local $drives = DriveGetDrive("ALL")
    GUICtrlSetData($inpLocalDirectory, "Drive Selection")
    _GUICtrlListView_BeginUpdate($hListView1)
    _GUICtrlListView_DeleteAllItems($hListView1)
    For $i = 1 To $drives[0]
    _GUICtrlListView_AddItem($hListView1, StringUpper($drives[$i]) & "\", _GUIImageList_GetFileIconIndex($drives[$i] & "\"))
    Next
    _GUICtrlListView_EndUpdate($hListView1)
    Return
    EndIf
    If StringRight($DIRECTORY_LOCAL, 1) <> "\" Then $DIRECTORY_LOCAL &= "\"
    If DriveStatus(StringLeft($DIRECTORY_LOCAL, 3)) <> "READY" Then Return 0 * MsgBox(16 + 8192, 'Error on Drive Access', "Drive " & StringLeft($DIRECTORY_LOCAL, 3) & " not ready!")
    GUICtrlSetData($inpLocalDirectory, $DIRECTORY_LOCAL)
    $files = _SHLV__FileListToArray2($DIRECTORY_LOCAL, "*.*", 2)
    _GUICtrlListView_BeginUpdate($hListView1)
    _GUICtrlListView_DeleteAllItems($hListView1)
    Local $foldercount = 0
    _GUICtrlListView_AddItem($hListView1, "< .. >", $FOLDERUP_ICON_INDEX)
    If IsArray($files) Then
    _GUICtrlListView_SetItemCount($hListView1, $files[0] + 1)
    $foldercount = $files[0] + 1
    For $i = 1 To $files[0]
    $item = _GUICtrlListView_AddItem($hListView1, $files[$i], $FOLDER_ICON_INDEX)
    _GUICtrlListView_AddSubItem($hListView1, $item, __SHLV_FormatFilesize(DirGetSize($DIRECTORY_LOCAL & $files[$i], 2)), 2)
    Next
    EndIf
    $files = _SHLV__FileListToArray2($DIRECTORY_LOCAL, "*.*", 1)
    _GUICtrlListView_EndUpdate($hListView1)
    _GUICtrlListView_BeginUpdate($hListView1)
    If IsArray($files) Then
    _GUICtrlListView_SetItemCount($hListView1, $files[0] + $foldercount)
    For $i = 1 To $files[0]
    $item = _GUICtrlListView_AddItem($hListView1, $files[$i], _GUIImageList_GetFileIconIndex($files[$i]))
    _GUICtrlListView_AddSubItem($hListView1, $item, __SHLV_FileDateString2Calc(FileGetTime($DIRECTORY_LOCAL & $files[$i], 0, 1)), 1)
    _GUICtrlListView_AddSubItem($hListView1, $item, __SHLV_FormatFilesize(FileGetSize($DIRECTORY_LOCAL & $files[$i])), 2)
    Next
    EndIf
    _GUICtrlListView_EndUpdate($hListView1)
    EndFunc ;==>_SHLV_PopulateLocalListView

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

    ; Prog@ndy
    Func __SHLV_FormatFilesize($size)
    Select
    Case $size > 1000
    Return Round($size / 1024, 1) & " KB"
    Case $size > 1048500
    Return Round($size / 1048576, 1) & " MB"
    Case Else
    Return $size & " Byte"
    EndSelect
    EndFunc ;==>__SHLV_FormatFilesize

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

    ; Prog@ndy
    Func _GUIImageList_GetSystemImageList($bLargeIcons = False)
    Local $dwFlags, $hIml, $FileInfo = DllStructCreate($tagSHFILEINFO)

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

    $dwFlags = BitOR($SHGFI_USEFILEATTRIBUTES, $SHGFI_SYSICONINDEX)
    If Not ($bLargeIcons) Then
    $dwFlags = BitOR($dwFlags, $SHGFI_SMALLICON)
    EndIf

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

    ;~ '// Load the image list - use an arbitrary file extension for the
    ;~ '// call to SHGetFileInfo (we don't want to touch the disk, so use
    ;~ '// FILE_ATTRIBUTE_NORMAL && SHGFI_USEFILEATTRIBUTES).
    $hIml = _WinAPI_SHGetFileInfo(".txt", $FILE_ATTRIBUTE_NORMAL, _
    DllStructGetPtr($FileInfo), DllStructGetSize($FileInfo), $dwFlags)

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

    Return $hIml
    EndFunc ;==>_GUIImageList_GetSystemImageList

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

    ; Prog@ndy
    Func _WinAPI_SHGetFileInfo($pszPath, $dwFileAttributes, $psfi, $cbFileInfo, $uFlags)
    Local $return = DllCall("shell32.dll", "DWORD*", "SHGetFileInfo", "str", $pszPath, "DWORD", $dwFileAttributes, "ptr", $psfi, "UINT", $cbFileInfo, "UINT", $uFlags)
    If @error Then Return SetError(@error, 0, 0)
    Return $return[0]
    EndFunc ;==>_WinAPI_SHGetFileInfo

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

    ; Prog@ndy
    Func _GUIImageList_GetFileIconIndex($sFileSpec, $bLargeIcons = False, $bForceLoadFromDisk = False)
    Local $dwFlags, $FileInfo = DllStructCreate($tagSHFILEINFO)

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

    $dwFlags = $SHGFI_SYSICONINDEX
    If $bLargeIcons Then
    $dwFlags = BitOR($dwFlags, $SHGFI_LARGEICON)
    Else
    $dwFlags = BitOR($dwFlags, $SHGFI_SMALLICON)
    EndIf
    ;~ ' We choose whether to access the disk or not. If you don't
    ;~ ' hit the disk, you may get the wrong icon if the icon is
    ;~ ' not cached. But the speed is very good!
    If Not $bForceLoadFromDisk Then
    $dwFlags = BitOR($dwFlags, $SHGFI_USEFILEATTRIBUTES)
    EndIf

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

    ;~ ' sFileSpec can be any file. You can specify a
    ;~ ' file that does not exist and still get the
    ;~ ' icon, for example sFileSpec = "C:\PANTS.DOC"
    Local $lR = _WinAPI_SHGetFileInfo( _
    $sFileSpec, $FILE_ATTRIBUTE_NORMAL, DllStructGetPtr($FileInfo), DllStructGetSize($FileInfo), _
    $dwFlags _
    )

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

    If ($lR = 0) Then
    Return SetError(1, 0, -1)
    Else
    Return DllStructGetData($FileInfo, "iIcon")
    EndIf
    EndFunc ;==>_GUIImageList_GetFileIconIndex

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

    ; Author(s): Prog@ndy
    Func __SHLV_FileDateString2Calc($filedate)
    Return StringRegExpReplace($filedate, "(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})", "$1/$2/$3 $4:$5:$6")
    EndFunc ;==>__SHLV_FileDateString2Calc
    ; Author(s): Prog@ndy
    Func __SHLV_CalcDate2FileDateString($calcdate)
    Return StringRegExpReplace($calcdate, "(\d{4})/(\d{2})/(\d{2}) (\d{2})(IMG:http://www.autoitscript.com/forum/style_em…/autoit/sad.gif) \d{2})(IMG:http://www.autoitscript.com/forum/style_em…/autoit/sad.gif) \d{2})", "$1$2$3$4$5$6")
    EndFunc ;==>__SHLV_CalcDate2FileDateString

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

    ; Prog@ndy
    Func _SHLV_WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo, $hListView1 = $SHELLLISTVIEWHANDLE

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hListView1
    ;MsgBox(1, "", $iCode)
    Switch $iCode
    Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
    Local $ItemText = _GUICtrlListView_GetItemText($hListView1, _GUICtrlListView_GetSelectedIndices($hListView1), 0)
    _Browse($ItemText)

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

    Case $LVN_KEYDOWN
    Local $tagLVKEYDOWN = $tagNMHDR & "; USHORT wVKey; UINT flags;"
    $tNMHDR = DllStructCreate($tagLVKEYDOWN, $ilParam)
    ;MsgBox(1, "", DllStructGetData($tNMHDR, "wVKey"))
    Switch DllStructGetData($tNMHDR, "wVKey")
    Case 0x27; rechte Pfeiltaste
    Local $ItemText = _GUICtrlListView_GetItemText($hListView1, _GUICtrlListView_GetSelectedIndices($hListView1), 0)
    _Browse($ItemText)
    Case 0x25 ;linke Pfeiltaste
    Local $slash = StringInStr($DIRECTORY_LOCAL, "\", 1, -2)
    If $slash Then
    $DIRECTORY_LOCAL = StringLeft($DIRECTORY_LOCAL, $slash)
    ElseIf StringRegExp($DIRECTORY_LOCAL, "\A[A-Za-z]:\\\Z") Then
    $DIRECTORY_LOCAL = ""
    EndIf
    _SHLV_PopulateLocalListView($ListView1, $DIRECTORY_LOCAL)
    ;No return value
    EndSwitch
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_SHLV_WM_NOTIFY

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

    Func _Browse($data)
    If StringInStr(FileGetAttrib($DIRECTORY_LOCAL & $data), "D") Then
    $DIRECTORY_LOCAL &= $data
    _SHLV_PopulateLocalListView($ListView1, $DIRECTORY_LOCAL)
    ElseIf StringRegExp($data, "\A[A-Za-z]:\\\Z") Then
    $DIRECTORY_LOCAL = $data
    _SHLV_PopulateLocalListView($ListView1, $DIRECTORY_LOCAL)
    ElseIf $data = "< .. >" Then
    Local $slash = StringInStr($DIRECTORY_LOCAL, "\", 1, -2)
    If $slash Then
    $DIRECTORY_LOCAL = StringLeft($DIRECTORY_LOCAL, $slash)
    ElseIf StringRegExp($DIRECTORY_LOCAL, "\A[A-Za-z]:\\\Z") Then
    $DIRECTORY_LOCAL = ""
    EndIf
    _SHLV_PopulateLocalListView($ListView1, $DIRECTORY_LOCAL)
    Else
    If MsgBox(36, "ShellListView", "Soll diese Datei geöffnet werden? " & @CRLF & $DIRECTORY_LOCAL & $data) = 6 Then
    ShellExecute($DIRECTORY_LOCAL & $data, "", $DIRECTORY_LOCAL)
    EndIf
    EndIf
    EndFunc ;==>_Browse

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

    ; Author ........: SolidSnake <MetalGX91 at GMail dot com>
    ; Modified by Prog@ndy
    Func _SHLV__FileListToArray2($sPath, $sFilter = "*", $iFlag = 0)
    Local $hSearch, $sFile, $asFileList
    If Not FileExists($sPath) Then Return SetError(1, 1, "")
    If (StringInStr($sFilter, "\")) Or (StringInStr($sFilter, "/")) Or (StringInStr($sFilter, ":")) Or (StringInStr($sFilter, ">")) Or (StringInStr($sFilter, "<")) Or (StringInStr($sFilter, "|")) Or (StringStripWS($sFilter, 8) = "") Then Return SetError(2, 2, "")
    If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
    If (StringMid($sPath, StringLen($sPath), 1) = "\") Then $sPath = StringTrimRight($sPath, 1) ; needed for Win98 for x:\ root dir
    $hSearch = FileFindFirstFile($sPath & "\" & $sFilter)
    If $hSearch = -1 Then Return SetError(4, 4, "")
    While 1
    $sFile = FileFindNextFile($hSearch)
    If @error Then
    SetError(0)
    ExitLoop
    EndIf
    If $iFlag = 1 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") <> 0 Then ContinueLoop
    If $iFlag = 2 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") = 0 Then ContinueLoop
    $asFileList &= $sFile & @CR
    WEnd
    FileClose($hSearch)
    If Not $asFileList Then
    Dim $asFileList[1] = [0]
    Return SetError(1, 0, $asFileList)
    EndIf
    Return StringSplit(StringTrimRight($asFileList, 1), @CR)
    EndFunc ;==>_SHLV__FileListToArray2

    [/autoit]

    \edit Oscars Variante bremst doch eigentlich nur die relativ langsame Funktion: _FileListToArray ?
    Da lässt sich bestimmt noch was rausholen. :thumbup:

    2 Mal editiert, zuletzt von nuts (18. Januar 2010 um 23:06)

  • Hallo Oscar,

    wie immer ein tolles Script :thumbup: . Benötigt bei mir ca. 9 s zum einlesen von c:\ bis ich eine Auswagl machen darf, im Vergleich dazu beim Aufruf von _GUICtrlTreeView_CreateDirectory($hTreeView, "c:\") vergehen ca 410 s. Toller Zeitgewinn,

    mfg (Auto)Bert

  • Guten Morgen Oscar!


    Hätte da vieleicht noch eine idee, um alle Laufwerke aufzulisten!

    [autoit]

    #include <Array.au3>
    $st = '.'

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

    $obWMI = ObjGet('winmgmts:\\' & $st & '\root\CIMV2')
    $co = $obWMI.ExecQuery('SELECT * FROM Win32_LogicalDiskRootDirectory')
    If Not IsObj($co) Then MsgBox(0, 'WMI Output', 'No WMI Objects Found for class: ' & 'Drive')
    Dim $aArray[$co.Count], $i = 0
    For $ob In $co
    $aArray[$i] = StringReplace(StringRight($ob.GroupComponent, 3), '"', '\')
    $i += 1
    Next
    _ArrayDisplay($aArray)

    [/autoit]


    LG Kleienr

    • Offizieller Beitrag

    @kleiner27: Warum so kompliziert? Gibt doch einen AutoIt-Befehl dazu:

    [autoit]


    $aDrives = DriveGetDrive('ALL')
    _ArrayDisplay($aDrives)

    [/autoit]

    autoBert: Der Unterschied zu _GUICtrlTreeView_CreateDirectory() ist ja der, dass _GUICtrlTreeView_FileExplorer() die Daten nicht alle auf einmal einliest, sondern am Anfang zwei Verzeichnisebenen und anschließend (immer dann, wenn Du auf einen Plus-Button klickst) eine weitere Ebene. Das ist für den Anwender angenehmer, weil er eher den Verzeichnisbaum zu sehen bekommt und schneller darin navigieren kann. Das man dann, wenn ein Ordner viele Unterordner und Dateien enthält (wie beispielsweise das Windows-Verzeichnis), nochmal etwas warten muss, ist der Nachteil dieser Methode. :huh:

    nuts: Hast Du Dir die neue _FileListToArray-Funktion mal angesehen? Die arbeitet nicht mehr mit ReDims. Ich denke nicht, dass man da noch viel mehr rausholen kann.
    Die Funktion von Prog@ndy ist nicht schlecht, aber ja auch kein echtes TreeView.

    @Ludwig: Die Dateiicons einzulesen kostet aber enorm Zeit und da muss man in AutoIt schon Kompromisse machen.


    Edit: Ok, es geht noch etwas schneller, wenn man das Ganze nicht zweimal einliest, sondern alles in eine Schleife packt:

    Spoiler anzeigen
    [autoit]


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

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

    $sPath = 'c:'

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

    $hGui = GUICreate('Select File or Folder', 400, 400)
    $hTreeview = GUICtrlCreateTreeView(10, 10, 380, 360, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS))
    $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, 3)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 1)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 4)
    _GUICtrlTreeView_SetNormalImageList($hTreeview, $hImage)

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

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

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

    $hRoot = _GUICtrlTreeView_Add($hTreeview, $hTreeview, $sPath, 1, 1)
    _GUICtrlTreeView_SetState($hTreeview, $hRoot, $TVIS_EXPANDED)

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

    _GUICtrlTreeView_BeginUpdate($hTreeview)
    GUISetCursor(15, 1, $hGui)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hRoot, $sPath, 2)
    GUISetCursor(2, 1, $hGui)
    _GUICtrlTreeView_EndUpdate($hTreeview)

    [/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]

    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    GUIRegisterMsg($WM_NOTIFY, '')
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
    $iCode = DllStructGetData($tNMHDR, 'Code')
    If $hWndFrom = $hWndTreeview And $iCode = $NM_CLICK Then
    ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
    _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    ToolTip('')
    EndIf
    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY

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

    Func _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    Local $aTVPos, $aPos, $hItem, $hChild, $sTree
    $aTVPos = ControlGetPos($hGui, '', $hTreeview)
    $aPos = GUIGetCursorInfo($hGui)
    $hItem = _GUICtrlTreeView_HitTestItem($hTreeview, $aPos[0], $aPos[1] - $aTVPos[1])
    If _GUICtrlTreeView_GetExpanded($hTreeview, $hItem) Then Return
    $hChild = _GUICtrlTreeView_GetFirstChild($hTreeview, $hItem)
    _GUICtrlTreeView_BeginUpdate($hTreeview)
    If $hChild <> 0 Then
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
    EndIf
    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)
    EndFunc ;==>_GUICtrlTreeView_FileExplorer

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

    Func _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hItem, $sPath, $iRec)
    Local $aDirList, $aFileList, $tmp
    $iRec -= 1
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If $hSearch <> -1 Then
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If @extended Then
    If Not StringInStr(FileGetAttrib($sPath & $sFile), 's') Then
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 1, 1)
    If $iRec > 0 Then _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $tmp, $sPath & $sFile, $iRec)
    EndIf
    Else
    If Not StringInStr(FileGetAttrib($sPath & $sFile), 's') Then
    _GUICtrlTreeView_AddChild($hTreeview, $hItem, $sFile, 0, 0)
    EndIf
    EndIf
    WEnd
    FileClose($hSearch)
    EndIf
    EndFunc ;==>_GUICtrlTreeView_FileExplorerRecursive

    [/autoit]

    Aber dann ist die Sortierung auch eine andere (Vorher: erst die Verzeichnisse, dann die Dateien. Jetzt: Verzeichnisse und Dateien gemischt). Tja, wohl eine Geschmacksfrage... :rolleyes:


  • Die Funktion von Prog@ndy ist nicht schlecht, aber ja auch kein echtes TreeView.


    Da kann man auch ein TreeView draus machen, hab bloß keine lust ;)
    Was du bei dir noch einbauen könntest, wären die richtigen Dateisymbole. Sonst ist es Top.

    • Offizieller Beitrag

    Das mit den Dateisymbolen habe ich schon versucht, aber das auslesen aus den Dateien dauert zu lange.
    Hier mal mein Versuch:

    Spoiler anzeigen
    [autoit]


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

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

    $sPath = 'C:'

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

    $hGui = GUICreate('Select File or Folder', 400, 400)
    $hTreeview = GUICtrlCreateTreeView(10, 10, 380, 360, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS))
    $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, 3)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 4)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 1)
    _GUICtrlTreeView_SetNormalImageList($hTreeview, $hImage)

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

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

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

    $hRoot = _GUICtrlTreeView_Add($hTreeview, $hTreeview, $sPath, 0, 0)
    _GUICtrlTreeView_SetState($hTreeview, $hRoot, $TVIS_EXPANDED)

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

    _GUICtrlTreeView_BeginUpdate($hTreeview)
    GUISetCursor(15, 1, $hGui)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hRoot, $sPath, 2)
    GUISetCursor(2, 1, $hGui)
    _GUICtrlTreeView_EndUpdate($hTreeview)

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

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

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

    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    GUIRegisterMsg($WM_NOTIFY, '')
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
    $iCode = DllStructGetData($tNMHDR, 'Code')
    If $hWndFrom = $hWndTreeview And $iCode = $NM_CLICK Then
    ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
    _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    ToolTip('')
    EndIf
    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY

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

    Func _GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
    Local $aTVPos, $aPos, $hItem, $hChild, $sTree
    $aTVPos = ControlGetPos($hGui, '', $hTreeview)
    $aPos = GUIGetCursorInfo($hGui)
    $hItem = _GUICtrlTreeView_HitTestItem($hTreeview, $aPos[0], $aPos[1] - $aTVPos[1])
    If _GUICtrlTreeView_GetExpanded($hTreeview, $hItem) Then Return
    $hChild = _GUICtrlTreeView_GetFirstChild($hTreeview, $hItem)
    _GUICtrlTreeView_BeginUpdate($hTreeview)
    If $hChild <> 0 Then
    $sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), '|', '\')
    _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
    EndIf
    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)
    EndFunc ;==>_GUICtrlTreeView_FileExplorer

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

    Func _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hItem, $sPath, $iRec)
    Local $aDirList, $aFileList, $tmp, $hIcon
    $iRec -= 1
    $aDirList = _FileListToArray($sPath, '*', 2)
    If IsArray($aDirList) Then
    For $i = 1 To $aDirList[0]
    If Not StringInStr(FileGetAttrib($sPath & '\' & $aDirList[$i]), 's') Then
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $aDirList[$i], 0, 0)
    If $iRec > 0 Then _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $tmp, $sPath & '\' & $aDirList[$i], $iRec)
    EndIf
    Next
    EndIf
    $aFileList = _FileListToArray($sPath, '*', 1)
    If IsArray($aFileList) Then
    For $i = 1 To $aFileList[0]
    If Not StringInStr(FileGetAttrib($sPath & '\' & $aFileList[$i]), 's') Then
    $hIcon = _GUIImageList_AddIcon($hImage, $sPath & '\' & $aFileList[$i], 0) ; <-- von hier
    If $hIcon = 0 Then
    $hIcon = 1
    Else
    _GUICtrlTreeView_SetNormalImageList($hTreeview, $hImage) ; <-- bis hier
    EndIf
    $tmp = _GUICtrlTreeView_AddChild($hTreeview, $hItem, $aFileList[$i], $hIcon, $hIcon)
    EndIf
    Next
    EndIf
    EndFunc ;==>_GUICtrlTreeView_FileExplorerRecursive

    [/autoit]


    Oder kennst Du eine schnellere Methode?
    Weil so ist das nicht wirklich brauchbar. :S

  • Das rekursive einlesen des Inhaltsverzeichnisses einer ganzen Festplatte kann ja recht lange dauern. Wenn man dieses aber in einem Treeview haben will, dann gibt es nur diese Möglichkeit oder man liest das Verzeichnis ebenenweise (eine Verzeichnisebene nach der anderen) ein.
    Aber immer nur eine Ebene sieht nicht so toll aus, weil dann die Verzeichnisse kein Plus-Button haben (als Kennzeichen dafür, dass der Ordner nicht leer ist). Also muss man mindestens zwei Ebenen rekursiv einlesen und das ist (bzw. war :D ) gar nicht so einfach.

    Hallo,

    ich würde gern sofort das gesamte Inhaltsverzeichnis des Rootverzeichnisses einlesen (muss ja nicht die ganze Festplatte sein).

    Ziel:

    Ich möchte einen Ordner angeben (bevor sich das TreeView aufbaut)
    nach drücken des START-Buttons:
    der angegebene Ordner soll sich rekursiv in einem TreeView aufbauen (mit + und Checkboxen vor jedem Ordner und jeder Datei)
    Jeder Ordner soll Standartmäßig Expandiert sein, und jeder Ordner, sowie jede Datei im TreeView soll das Häkchen in der Checkbox haben.

    Das mit Expandieren und SetChecked geht leider nicht, wenn man "nur" zwei Ebenen einliest...
    kann mir jemand helfen?

    MfG

    3 Mal editiert, zuletzt von treFFnix (20. Juli 2010 um 19:28)

  • Hallo Oscar.

    Das Skript ist dir super gelungen. Es funktioniert gut und ist schnell.
    Aber vielleicht funktioniert dein Skript etwas zu gut.
    Es sieht Ordner, die man nicht mal sehen kann, wenn man Versteckte Symbole einblendet.
    Dann gibts da z.B. C:\Config.msi die Datei kann man aber normalerweise nicht sehen (bei mir zumindest).
    Du solltest also Versteckte Symbole ausblenden.
    Trotzdem dickes Lob an die schnelle funktionalität.

    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Endlich mal ein guter DirSelect-Skript :party: .
    Denn FileSelectFolder war ja gar nicht mehr zu gebrauchen....
    PS: Währe schön wenn es noch eine "StartOrdner"-Auswahl geben würde ;) .

    Nur keine Hektik - das Leben ist stressig genug