Kann mir jemand helfen...??
hier das Script von oscar:
[autoit]#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiTreeView.au3>
#include <StructureConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
$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)
$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', ; 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()
GUICtrlSetStyle($hTreeview, Default, $WS_EX_COMPOSITED + $WS_EX_CLIENTEDGE)
$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('')
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
Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $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
Return $GUI_RUNDEFMSG
EndFunc ;==>_WM_NOTIFY
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)
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)
_GUICtrlTreeView_FileExplorerRecursive($hTreeview, $hChild, $sTree, 1)
EndIf
Until $hChild = 0
_GUICtrlTreeView_EndUpdate($hTreeview)
EndIf
EndFunc ;==>_GUICtrlTreeView_FileExplorer
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
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) Or _IsReparsePoint($sPath & $sFile) Then ContinueLoop
$sFileList &= $sFile & '|'
WEnd
FileClose($hSearch)
If $sFileList = '' Then Return
Return StringSplit(StringTrimRight($sFileList, 1), '|', 2)
EndFunc ;==>__FileListToArray
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
Und der Fehler:
Wenn man manchmal einen Ordner Öffnet, werden die Unterordner ohne + angezeigt, obwohl welches Vorhanden sein MUSS!! (siehe anhang)
Dieser Fehler tritt nicht immer auf: habe das gefühl, dass er auftritt, wenn ich etwas schneller klicke (bin mir aber nicht sicher)
Jedenfalls hab ich schon so einieges Probiert...
Die funktion _WM_NOTIFY wird auf jeden fall immer aufgerufen, auch die Funktion:
_GUICtrlTreeView_FileExplorer($hGui, $hTreeview)
Fehler muss also danach irgendwo sein!!! ABER WO?? sitze seit einer Woche dran und weiß einfach nicht mehr weiter...
Habs an verschiedenen Rechnern probiert um auch diese möglichkeit auszuschließen doch TROTZDEM:
Probierte rechner:
2 * XP rechner
2 * Windows 7 rechner
1 * Vista Rechner
... und einfach immeer wieder der fehler....
Könnt ihr mir helfen??
Wäre unendlich dankbar!