Hey Leute, ich hab leider wieder ein Problem...
ein relativ kleiner aber nerviger Fehler....:(
[autoit]#include <GUIConstantsEx.au3>
#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)
$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ü...
$cm_process = GUICtrlCreateContextMenu($hTreeview)
GUICtrlCreateMenuitem("RUN", $cm_process)
GUICtrlSetOnEvent(-1, "_Run")
;Zuordnung der Icons...
$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
;Wähle Symbol aus, welches unten dann verknüpft wird...
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
;Füge Eintrag in Liste hinzu...
$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('')
;Rüft '_WM_NOTIFY' auf, wenn auf + geklickt...
GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $hCancel
Exit
Case $hOk
EndSwitch
WEnd
Func _run()
$iSelect = _GUICtrlTreeView_GetSelection($hTreeview)
$sTree = StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $iSelect), '|', '\')
MsgBox(0, 'Selected Path/File', $sTree)
EndFunc
Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
GUIRegisterMsg($WM_NOTIFY, '')
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
GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
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)
$iTimer = TimerInit()
_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) Then ContinueLoop
$sFileList &= $sFile & '|'
WEnd
FileClose($hSearch) ;
If $sFileList = '' Then Return
Return StringSplit(StringTrimRight($sFileList, 1), '|', 2)
EndFunc ;==>__FileListToArray
Wenn ich, ohne dass ich vorher mit dem Linken Mausklick den Ordner angeklickt habe, ihn mit der Rechten Maustaste anklicke, erkennt er den MOMENTAN geklickten NICHT sondern den, der letztes mal geklickt wurde... (RUN-Funktion...)
Es ist also so, also würde er sich nicht merken, auf Welchen Ordner jetzt Rechts geklickt wurde....
kann mir da jemand helfen...??
Danke!!