Das fängt Oscar gar nicht ab und dann kommt auch der von dir beschriebene Effekt.
Treeview FileExplorer
-
-
- Offizieller Beitrag
Nuts, passiert der Fehler bei Dir auch?
Ok, bei der Tastaturbedienung kann ich das nachvollziehen, aber das ist ja was anderes. -
Nur bei der Tastaturbedienung kommt der "Fehler".
-
Ich hab mal die Tastaturbedienung eingebaut:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiTreeView.au3>
#include <StructureConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiImageList.au3>$hGui = GUICreate('FileExplorer', 400, 400)
[/autoit] [autoit][/autoit] [autoit]
$hTreeview = GUICtrlCreateTreeView(10, 10, 380, 360)
$hWndTreeview = GUICtrlGetHandle($hTreeview)
$hOk = GUICtrlCreateButton('Ok', 240, 375, 60, 22)
$hCancel = GUICtrlCreateButton('Cancel', 320, 375, 60, 22)$hImage = _GUIImageList_Create(16, 16, 5, 1)
[/autoit] [autoit][/autoit] [autoit]
_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', ; 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)GUISetState()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetStyle($hTreeview, Default, $WS_EX_COMPOSITED + $WS_EX_CLIENTEDGE)$aDrives = DriveGetDrive('ALL')
[/autoit] [autoit][/autoit] [autoit]
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('')GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
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
WEndFunc _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo, $ItemText, $wVKey$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
$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)Case $NM_CLICK ;linke Maustaste
[/autoit] [autoit][/autoit] [autoit]
ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
_GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
ToolTip('')
Case $NM_RCLICK ; rechte MaustasteCase $NM_RDBLCLK ;Doppelklick (rechte Maustaste)
[/autoit] [autoit][/autoit] [autoit]Case $TVN_KEYDOWN
[/autoit] [autoit][/autoit] [autoit]
Local $tagLVKEYDOWN = $tagNMHDR & "; USHORT wVKey; UINT flags;"$tNMHDR = DllStructCreate($tagLVKEYDOWN, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
$wVKey = DllStructGetData($tNMHDR, "wVKey")
;ConsoleWrite ($wVKey & " " &@CRLF)
Switch $wVKey
Case 40 ;runterCase 38 ;hoch
[/autoit] [autoit][/autoit] [autoit]Case 37; rechte Pfeiltaste
[/autoit] [autoit][/autoit] [autoit]Case 39 ;linke Pfeiltaste
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
_GUICtrlTreeView_FileExplorer($hGui, $hTreeview, False)
ToolTip('')
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>_WM_NOTIFYFunc _GUICtrlTreeView_FileExplorer($hGui, $hTreeview, $mode = True)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
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 ReturnEndSwitch
[/autoit] [autoit][/autoit] [autoit]
$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_FileExplorerFunc _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hItem, $sPath, $iRec)
[/autoit] [autoit][/autoit] [autoit]
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_FileExplorerRecursiveFunc _MyFileListToArray($sPath, $iFlag)
[/autoit]
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 ;==>_MyFileListToArrayVielleicht wars das ja schon
-
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]
[/autoit] [autoit][/autoit] [autoit]
#cs ----------------------------------------------------------------------------AutoIt Version: 3.3.6.1
[/autoit] [autoit][/autoit] [autoit]
Author: myNameScript Function:
[/autoit] [autoit][/autoit] [autoit]
Template AutoIt script.#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>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiImageList.au3>
#include <GuiTreeView.au3>
#include <StructureConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>Opt("guiOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]$hGui = GUICreate('FileExplorer', 400, 400)
[/autoit] [autoit][/autoit] [autoit]
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);erstelle KontextMenü...
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$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);Zuordnung der Icons...
[/autoit] [autoit][/autoit] [autoit]
$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', ; 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)GUISetState()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUICtrlSetStyle($hTreeview, Default, $WS_EX_COMPOSITED + $WS_EX_CLIENTEDGE);Ab hier ist ButtonFunktion....
[/autoit] [autoit][/autoit] [autoit]
$aDrives = DriveGetDrive('ALL') ;Übertragen ;
ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
_GUICtrlTreeView_BeginUpdate($hTreeview)
For $i = 1 To $aDrives[0]
Sleep(20)$iLWindex = 0
[/autoit] [autoit][/autoit] [autoit]
;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('');Rüft '_WM_NOTIFY' auf, wenn auf + geklickt...
[/autoit] [autoit][/autoit] [autoit]
$GMsgErr = GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
If $GMsgErr = 0 Then MsgBox(0,"Explorer", "GuiRegisterMsg Fehler!")While Sleep(20)
[/autoit] [autoit][/autoit] [autoit]Switch GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]
Case $GUI_EVENT_CLOSE, $hCancel
Exit
Case $hOk
EndSwitch
WEndFunc _exit()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _run()
[/autoit] [autoit][/autoit] [autoit]
$iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
$sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $iSelect), '|', '\')
MsgBox(0, 'Selected Path/File', $sTree)
EndFuncFunc _CutOut()
[/autoit] [autoit][/autoit] [autoit]
$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)
EndFuncFunc _delete()
[/autoit] [autoit][/autoit] [autoit]
$iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
_GUICtrlTreeView_Delete($hTreeview, $iSelect)
EndFuncFunc _rename()
[/autoit] [autoit][/autoit] [autoit]
$iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
_GUICtrlTreeView_SetText($hTreeview, $iSelect, 'HAAAAAAALLLOOO')
EndFuncFunc _createFolder()
[/autoit] [autoit][/autoit] [autoit]
$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)Func _createLINK()
[/autoit] [autoit][/autoit] [autoit]
$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)Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
#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)Case $NM_CLICK ;linke Maustaste
[/autoit] [autoit][/autoit] [autoit]
ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
_GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
ToolTip('')
Case $NM_RCLICK ; rechte MaustasteCase $NM_RDBLCLK ;Doppelklick (rechte Maustaste)
[/autoit] [autoit][/autoit] [autoit]Case $TVN_KEYDOWN
[/autoit] [autoit][/autoit] [autoit]
Local $tagLVKEYDOWN = $tagNMHDR & "; USHORT wVKey; UINT flags;"$tNMHDR = DllStructCreate($tagLVKEYDOWN, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
$wVKey = DllStructGetData($tNMHDR, "wVKey")
;ConsoleWrite ($wVKey & " " &@CRLF)
Switch $wVKey
Case 40 ;runterCase 38 ;hoch
[/autoit] [autoit][/autoit] [autoit]Case 37; rechte Pfeiltaste
[/autoit] [autoit][/autoit] [autoit]Case 39 ;linke Pfeiltaste
[/autoit] [autoit][/autoit] [autoit]
ToolTip('Please wait...', Default, Default, 'Read Directory', 1)
_GUICtrlTreeView_FileExplorer($hGui, $hTreeview, False)
ToolTip('')
EndSwitch
EndSwitch
EndSwitchReturn $GUI_RUNDEFMSG
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>_WM_NOTIFYFunc _GUICtrlTreeView_FileExplorer($hGui, $hTreeview, $mode = True)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
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 ReturnEndSwitch
[/autoit] [autoit][/autoit] [autoit]
$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_FileExplorerFunc _GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hItem, $sPath, $iRec)
[/autoit] [autoit][/autoit] [autoit]
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_FileExplorerRecursiveFunc _MyFileListToArray($sPath, $iFlag) ;Funktion muss Beim Server Laufen!
[/autoit] [autoit][/autoit] [autoit][/autoit]
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 ;==>__FileListToArrayund 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.
-
will dir ja jetzt nichts unterstellen, aber wenn ich das script compile meldet antivira ein "Trojaniches Pferd"
fehler, oder wahrheit? -
- Offizieller Beitrag
Was für eine Frage!? Du hast doch das Skript.
Nein, ist wieder mal eine "false positive"-Meldung von AntiVir. Kommt bei compilierten AutoIt-Skripten häufiger vor. -
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.
[autoit]
Skript von @progandyFunc ReparsePoint($FLS);[user='200143']progandy[/user]
[/autoit]
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 ;==>GetFileAttributesLg 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!
@Mr_gitarre Selbst ist der Mann o. die Frau
Lg kleiner
-
- Offizieller Beitrag
Kleiner: Wie hast Du den Fehler produziert? Der Ordner wird bei mir als leer (Skript hat keine Rechte) angezeigt.
-
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
-
- Offizieller Beitrag
Ok, habe die Funktion eingebaut. Neue Version in Post #1. Danke!
-
Hi!
Klappt super, eins würde ich in dein Start Post nicht schreiben," Verknüpfungen werden nicht angezeigt"!
Lieber Symbolische Links die als Reparse Points bekannt sind werden nicht Angezeigt!Lg Kleiner
-
- Offizieller Beitrag
Stimmt! Ist ja nicht das Gleiche. Geändert!
-
... 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.
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:
-