Hier nun die Version 1.1 des Filebrowser's (Vorstufe zur Verschlüsselungs-Anwendung):
Änderungen:
- Trennlinie zwischen TreeView und ListView verschiebbar
- Verschiebung wird auch beim nächsten Start wieder hergestellt
- kleinere Bugs beseitigt
FileBrowser V1.1
; =========================================================
; Titel: Filebrowser_TreeListView.au3
; Autor: [email='micha_he@autoit.de'][/email]
; Ideen & Hilfen: [email='spudw2k@autoitscript.com'][/email]
; [email='Oscar@autoit.de'][/email]
; Version: 1.1
; Datum: 12.01.2010
; =========================================================
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>
#include <ListViewconstants.au3>
#include <GuiListView.au3>
#include <GUITreeView.au3>
#include <File.au3>
Global $arrFileIcons[1]=["shell32.dll"], $sortdir=0
Global $gaDropFiles[1]
Global $WM_DROPFILES = 0x233
Global $IniFile = @ScriptDir & "\FileBrowser.ini"
Global $MousePos, $TreePos, $ListPos, $Snap = False, $CursorSwitched = False
Global $IniFile, $WinXPos, $WinYPos, $WinWidth, $WinHeight
$gui = GUICreate("FileBrowser", 780, 348, -1, -1, $WS_SIZEBOX, BitOr($WS_EX_CLIENTEDGE, $WS_EX_ACCEPTFILES))
$MainGroup = GUICtrlCreateGroup("", 8, 2, 764, 318, $WS_CLIPSIBLINGS)
GUICtrlSetResizing($MainGroup, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM)
$treeview = GUICtrlCreateTreeView(16, 18, 250, 290, BitOR($TVS_HASBUTTONS,$TVS_HASLINES,$TVS_LINESATROOT,$TVS_SHOWSELALWAYS,$WS_GROUP,$WS_TABSTOP,$WS_BORDER))
GUICtrlSetResizing($treeview, $GUI_DOCKAUTO)
$listview = GUICtrlCreateListView("Name|Type|Size|Modified", 266, 17, 500, 292, BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS,$WS_BORDER))
GUICtrlSetState($listView, $GUI_DROPACCEPTED)
GUICtrlSetResizing($listview, $GUI_DOCKAUTO)
_ColumnResize($listview)
$hLVContextMenu = GUICtrlCreateContextMenu($listview)
$hLVNewFolder = GUICtrlCreateMenuItem("Neuer Ordner", $hLVContextMenu)
$hLVNewFile = GUICtrlCreateMenuItem("Neue Datei", $hLVContextMenu)
$hLVSelectAll = GUICtrlCreateMenuItem("Alle markieren", $hLVContextMenu)
$hLVSelectNone = GUICtrlCreateMenuItem("Keine markieren", $hLVContextMenu)
$hLVItemDelete = GUICtrlCreateMenuItem("Löschen", $hLVContextMenu)
$tImage = _GUIImageList_Create(16, 16, 5, 2) ;Treeview Icon Image List
_GUIImageList_AddIcon($tImage, @SystemDir & "\shell32.dll", 3) ;Folder
_GUIImageList_AddIcon($tImage, @SystemDir & "\shell32.dll", 4) ;Folder Open
_GUIImageList_AddIcon($tImage, @SystemDir & "\shell32.dll", 181) ;Cdr
_GUIImageList_AddIcon($tImage, @SystemDir & "\shell32.dll",
;Fixed
_GUIImageList_AddIcon($tImage, @SystemDir & "\shell32.dll", 7) ;Removable
_GUIImageList_AddIcon($tImage, @SystemDir & "\shell32.dll", 9) ;Network
_GUIImageList_AddIcon($tImage, @SystemDir & "\shell32.dll", 11) ;CDRom
_GUIImageList_AddIcon($tImage, @SystemDir & "\shell32.dll", 109) ;No Symbol for Burner
_GUICtrlTreeView_SetNormalImageList($treeview, $tImage)
[/autoit] [autoit][/autoit] [autoit]; Lese verfügbare Laufwerke ein
;$drives = DriveGetDrive("FIXED")
;If @error Then Exit
;For $x = 1 To $drives[0]
; $icon=0
; If DriveGetType($drives[$x]) = "Fixed" Then $icon=3
; If DriveGetType($drives[$x]) = "Removable" Then $icon=4
; If DriveGetType($drives[$x]) = "Network" Then $icon=5
; If DriveGetType($drives[$x]) = "CDROM" Then $icon=6
; If $icon=0 Then
; $new = _GUICtrlTreeView_AddChild($treeview,"",$drives[$x],0,1)
; Else
; $new = _GUICtrlTreeView_AddChild($treeview,"",$drives[$x],$icon,$icon)
; EndIf
;Next
; Starte statt mit allen Laufwerken, nur mit einem Verzeichnis
_GUICtrlTreeView_AddChild($treeview, "", @ProgramFilesDir, 0, 1)
_GUICtrlTreeView_SelectItem($treeview, 0)
_FillFolder($treeview)
_ShowFolder($treeview, $listview, $gui)
GUIRegisterMsg($WM_DROPFILES, 'WM_DROPFILES_FUNC')
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
; Voreinstellungen versuchen zu laden und Fenster ggf. neu positionieren
$WinPos = WinGetPos($gui)
$TrayPos = WinGetPos("[CLASS:Shell_TrayWnd]", "")
$WinXPos = IniRead($IniFile,"MainGUI","WinXPos","")
$WinYPos = IniRead($IniFile,"MainGUI","WinYPos","")
$WinWidth = IniRead($IniFile,"MainGUI","WinWidth","")
$WinHeight = IniRead($IniFile,"MainGUI","WinHeight","")
$TreeWidth = IniRead($IniFile,"MainGUI","TreeWidth","")
If $WinXPos <> "" And $WinYPos <> "" Then
If $WinXPos < 0 Then $WinXPos = 0
If $WinYPos < 0 Then $WinYPos = 0
If $WinWidth < 200 Then $WinWidth = 200
If $WinHeight < 100 Then $WinHeight = 100
If $WinWidth > @DESKTOPWIDTH Then $WinWidth = @DESKTOPWIDTH
If $WinHeight > @DESKTOPHEIGHT Then $WinHeight = @DESKTOPHEIGHT
If $WinXPos > (@DESKTOPWIDTH - $WinWidth) Then $WinXPos = @DESKTOPWIDTH - $WinWidth
If $WinYPos > (@DESKTOPHEIGHT - $TrayPos[3] - $WinHeight) Then $WinYPos = @DESKTOPHEIGHT - $TrayPos[3] - $WinHeight
WinMove($gui,"",$WinXPos,$WinYPos,$WinWidth,$WinHeight)
GUISetState()
$TreePos = ControlGetPos($gui, "", $treeview)
$ListPos = ControlGetPos($gui, "", $listview)
If $TreeWidth <> "" Then
If $TreeWidth < 20 Then $TreeWidth = 20
If $TreeWidth > ($ListPos[0] + $ListPos[2] - 20) Then $TreeWidth = ($ListPos[0] + $ListPos[2] - 20)
GUICtrlSetPos($treeview, $TreePos[0], $TreePos[1], $TreeWidth)
GUICtrlSetPos($listview, $TreePos[0] + $TreeWidth, $ListPos[1], $ListPos[2] + $TreePos[2] - $TreeWidth)
EndIf
Else
GUISetState()
EndIf
$TreePos = ControlGetPos($gui, "", $treeview)
$ListPos = ControlGetPos($gui, "", $listview)
While True
$MousePos = GUIGetCursorInfo($gui)
; Cursur für Verschiebung der Trennlinie umschalten
If ($MousePos[0] >= ($TreePos[0] + $TreePos[2] - 4 ) And $MousePos[0] <= ($ListPos[0] + 4 )) Then
If MouseGetCursor() = 2 then
GUISetCursor(13,1)
$CursorSwitched = True
EndIf
Else
If $CursorSwitched = True Then
GUISetCursor(2)
$CursorSwitched = False
EndIf
EndIf
; Verschieben der Trennlinie zwischen TreeView und ListView
If $MousePos[2] = True Then ; linke Maustaste gedrückt ?
If $Snap = False And $CursorSwitched = True Then
$Snap = True
EndIf
If $Snap = True Then
$NewTreeWidth = $MousePos[0] - $TreePos[0]
If $NewTreeWidth < 20 Then $NewTreeWidth = 20
If $NewTreeWidth > ($TreePos[2] + $ListPos[2]) - 20 Then $NewTreeWidth = ($TreePos[2] + $ListPos[2]) - 20
ControlMove($gui, "", $treeview, $TreePos[0], $TreePos[1], $NewTreeWidth)
ControlMove($gui, "", $listview, $TreePos[0] + $NewTreeWidth, $ListPos[1], ($TreePos[2] + $ListPos[2]) - $NewTreeWidth)
$TreePos = ControlGetPos($gui, "", $treeview)
$ListPos = ControlGetPos($gui, "", $listview)
EndIf
Else
If $Snap = True Then
$Snap = False
GUICtrlSetPos($treeview, $TreePos[0], $TreePos[1])
GUICtrlSetPos($listview, $ListPos[0], $ListPos[1])
EndIf
EndIf
; Hauptauswahl
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
_ExitApp()
Case $GUI_EVENT_DROPPED
_AddNewObjects()
Case $hLVItemDelete
_DelObjects()
Case $hLVSelectAll
_GUICtrlListView_SetItemSelected($Listview, -1, True)
Case $hLVSelectNone
_GUICtrlListView_SetItemSelected($Listview, -1, False)
Case $hLVNewFolder
_AddNewFolder()
Case $hLVNewFile
_AddNewFile()
EndSwitch
WEnd
Func _ColumnResize(ByRef $hWnd,$type=0) ;Resize Listview Column routine
$winpos=WinGetPos($gui)
_GUICtrlListView_SetColumnWidth($hWnd, 0, $winpos[2]*.2375)
_GUICtrlListView_SetColumnWidth($hWnd, 1, $winpos[2]*.12)
_GUICtrlListView_SetColumnWidth($hWnd, 2, $winpos[2]*.1)
_GUICtrlListView_SetColumnWidth($hWnd, 3, $winpos[2]*.16)
EndFunc;==> _ColumnResize()
Func _FileGetIcon(ByRef $szIconFile, ByRef $nIcon, $szFile) ;Get Icon for Files - Special Thanks to MrCreator - http://www.autoitscript.com/forum/index.ph...st&p=421467
Dim $szRegDefault = "", $szDefIcon = ""
$szExt = StringMid($szFile, StringInStr($szFile, '.', 0, -1))
If $szExt = '.lnk' Then
$details = FileGetShortcut($szIconFile)
$szIconFile = $details[0]
$szExt = StringMid($details[0], StringInStr($details[0], '.', 0, -1))
EndIf
$szRegDefault = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" & $szExt, "ProgID")
If $szRegDefault = "" Then $szRegDefault = RegRead("HKCR\" & $szExt, "")
If $szRegDefault <> "" Then $szDefIcon = RegRead("HKCR\" & $szRegDefault & "\DefaultIcon", "")
If $szDefIcon = "" Then $szRegDefault = RegRead("HKCR\" & $szRegDefault & "\CurVer", "")
If $szRegDefault <> "" Then $szDefIcon = RegRead("HKCR\" & $szRegDefault & "\DefaultIcon", "")
If $szDefIcon = "" Then
$szIconFile = "shell32.dll"
ElseIf $szDefIcon <> "%1" Then
$arSplit = StringSplit($szDefIcon, ",")
If IsArray($arSplit) Then
$szIconFile = $arSplit[1]
If $arSplit[0] > 1 Then $nIcon = $arSplit[2]
Else
Return 0
EndIf
EndIf
Return 1
EndFunc;==> _FileGetIcon()
Func _FillFolder(ByRef $hWnd) ;Fill Folder in TreeView
Local $IsExpanded
$item = _GUICtrlTreeView_GetSelection($hWnd)
$IsExpanded = _GUICtrlTreeView_GetExpanded($hWnd, $item)
If _GUICtrlTreeView_GetChildCount($hWnd,$item) > 0 Then _GUICtrlTreeView_DeleteChildren($treeview, $item)
_GUICtrlTreeView_BeginUpdate($treeview)
$txt = _TreePath($hWnd,$item)
_SearchFolder($txt,$item)
If $IsExpanded Then _GUICtrlTreeView_Expand($hWnd, $item)
_GUICtrlTreeView_EndUpdate($treeview)
EndFunc;==> _FillFolder()
Func _FolderFunc($folders,$folder,$parent,$level) ;Add Folder to Source TreeView
If $parent = 0x00000000 Then Return
For $i = 1 To UBound($folders)-1
$parentitem = _GUICtrlTreeView_AddChild($treeview,$parent,$folders[$i],0,1)
_SearchFolder($folder & "\" & $folders[$i],$parentitem,$level+1)
Next
EndFunc;==> _FolderFunc()
Func _FriendlyDate($date) ;Convert Date for Readability
If Not IsArray($date) Then Return ""
Local $datetime=""
For $i = 0 To 5
$datetime &= $date[$i]
If $i < 2 Then $datetime &= "-"
If $i = 2 Then $datetime &= " "
If $i > 2 And $i < 5 Then $datetime &= ":"
Next
Return $datetime
Endfunc;==> _FriendlyDate()
Func _GetSelectedItems($hWnd,$list,$tree) ;Get list of Selected Items in Source ListView
$items = _GUICtrlListView_GetSelectedIndices($list,True)
For $i = 1 To $items[0]
$items[$i] = _TreePath($tree,_GUICtrlTreeView_GetSelection($tree)) & "\" & _GUICtrlListView_GetItemText(ControlGetHandle($hWnd,"",$list),$items[$i],0)
Next
Return $items
EndFunc;==> _GetSelectedItems()
Func _ReduceMemory($i_PID = -1) ;Reduces Memory Usage -- Special thanks to w0uter and jftuga
If $i_PID <> -1 Then
Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
Else
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
EndIf
Return $ai_Return[0]
EndFunc;==> _ReduceMemory()
Func _SearchFolder($folder,$parent,$level=0) ;Recursive Folder Search for Source Treeview/Listview
If $level >= 1 Then Return
$folders = _FileListToArray($folder,"*",2)
_FolderFunc($folders,$folder,$parent,$level)
EndFunc;==> _SearchFolder()
Func _ShowFolder(ByRef $tree,ByRef $list,ByRef $hWnd,$sort=0) ;Show folder in Source Folder
Dim $arrCurrentFolder[1][4]
$item = _GUICtrlTreeView_GetSelection($tree)
If $item = 0x000000 Then Return 0
_GUICtrlListView_BeginUpdate($list)
_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($list))
$path = _TreePath($tree,$item)
For $type = 1 To 2
Local $Sch
If $type = 1 Then $Sch = _FileListToArray($path, "*", 2)
If $type = 2 Then $Sch = _FileListToArray($path, "*", 1)
If UBound($Sch) > 0 Then
For $i = 1 To $Sch[0]
ReDim $arrCurrentFolder[UBound($arrCurrentFolder)+1][4]
If $type = 1 Then
$filefolder = "Folder"
$size = " "
Else
$filefolder = StringUpper(StringRight($Sch[$i],StringLen($Sch[$i])-StringInstr($Sch[$i],".",0,-1))) & " File"
$size = FileGetSize($path & "\" & $Sch[$i])
EndIf
$arrCurrentFolder[UBound($arrCurrentFolder)-1][0]=$Sch[$i]
$arrCurrentFolder[UBound($arrCurrentFolder)-1][1]=$filefolder
$arrCurrentFolder[UBound($arrCurrentFolder)-1][2]=$size
$arrCurrentFolder[UBound($arrCurrentFolder)-1][3]=_FriendlyDate(FileGetTime($path & "\" & $Sch[$i]))
Next
If $type = 1 And $sort <> 3 Then
_ArraySort($arrCurrentFolder,$sortdir,0,0,0)
Else
_ArraySort($arrCurrentFolder,$sortdir,0,0,$sort)
EndIf
If $type = 1 Then
For $x = 0 To UBound($arrCurrentFolder)-1
If $arrCurrentFolder[$x][0] Then
$idx = GUICtrlCreateListViewItem($arrCurrentFolder[$x][0] & "|" & $arrCurrentFolder[$x][1] & "|" & $arrCurrentFolder[$x][2] & "|" & $arrCurrentFolder[$x][3],$list)
GuiCtrlSetImage(-1, $arrFileIcons[0], -4)
EndIf
Next
$arrCurrentFolder=0
Dim $arrCurrentFolder[1][4]
EndIf
If $type = 2 Then
For $x = 0 To UBound($arrCurrentFolder)-1
If $arrCurrentFolder[$x][0] Then
$idx = GUICtrlCreateListViewItem($arrCurrentFolder[$x][0] & "|" & $arrCurrentFolder[$x][1] & "|" & $arrCurrentFolder[$x][2] & "|" & $arrCurrentFolder[$x][3],$list)
If StringRight($arrCurrentFolder[$x][0], 4) = ".exe" Then
$found = _ArraySearch($arrFileIcons,$arrCurrentFolder[$x][0],0,0,0,1)
If $found <> -1 Then
GuiCtrlSetImage(-1, $arrFileIcons[$found], 0)
Else
If GuiCtrlSetImage(-1, $path & "\" & $arrCurrentFolder[$x][0], 0) = 0 Then
GuiCtrlSetImage(-1, $arrFileIcons[0], -3)
Else
ReDim $arrFileIcons[UBound($arrFileIcons)+1]
$arrFileIcons[UBound($arrFileIcons)-1]=$path & "\" & $arrCurrentFolder[$x][0]
GuiCtrlSetImage(-1, $arrFileIcons[UBound($arrFileIcons)-1], 0)
EndIf
EndIf
ElseIf StringRight($arrCurrentFolder[$x][0], 3) = "htm" Or StringRight($arrCurrentFolder[$x][0], 3) = "html" Then
GuiCtrlSetImage(-1, $arrFileIcons[0], -221)
Else
$strExtension=StringTrimLeft($arrCurrentFolder[$x][0],StringInstr($arrCurrentFolder[$x][0],".",0,-1)-1)
If Not StringInstr($strExtension,".lnk",0,0,0,1) Then
$found = _ArraySearch($arrFileIcons,$arrCurrentFolder[$x][0],0,0,0,1)
Else
$found = _ArraySearch($arrFileIcons,$strExtension,0,0,0,1)
EndIf
If $found <> -1 Then
$icon = StringTrimLeft($arrFileIcons[$found],StringInstr($arrFileIcons[$found],"|",0,-2))
$icon = StringLeft($icon,StringInstr($icon,"|")-1)
$nIcon = StringRight($arrFileIcons[$found],StringLen($arrFileIcons[$found])-StringInstr($arrFileIcons[$found],"|",0,-1))
GuiCtrlSetImage(-1, $icon, $nIcon)
Else
Local $szIconFile = $path & "\" & $arrCurrentFolder[$x][0], $nIcon = 0
_FileGetIcon($szIconFile, $nIcon, $arrCurrentFolder[$x][0])
If $nIcon <> 0 Then $nIcon = - $nIcon
ReDim $arrFileIcons[UBound($arrFileIcons)+1]
$arrFileIcons[UBound($arrFileIcons)-1]=$path & "\" & $arrCurrentFolder[$x][0] & "|" & StringReplace($szIconFile,Chr(34),"") & "|" & StringReplace($nIcon,Chr(34),"")
GuiCtrlSetImage(-1, $szIconFile , $nIcon)
EndIf
EndIf
EndIf
Next
EndIf
EndIf
Next
$Sch=0
$nIcon=0
$szIconFile=0
$arrCurrentFolder=0
_GUICtrlListView_EndUpdate($list)
_ReduceMemory()
EndFunc;==> _ShowFolder()
Func _TreePath($hWnd,$item) ;Determine full path of selected item in TreeView
$txt = _GUICtrlTreeView_GetText($hWnd,$item)
Do
$parent = _GUICtrlTreeView_GetParentHandle($hWnd,$item)
If $parent <> 0 Then
$txt = _GUICtrlTreeView_GetText($hWnd,$parent) & "\" & $txt
$item = $parent
EndIf
Until $parent = 0
Return $txt
EndFunc;==> _TreePath()
Func _ExitApp()
Local $WinPos = WinGetPos($gui)
Local $TreePos = ControlGetPos($gui, "", $treeview)
; Fensterposition speichern, wenn nicht minimiert (= -32000)
If $WinPos[0] <> -32000 Then IniWrite($IniFile,"MainGUI","WinXPos",$WinPos[0])
If $WinPos[1] <> -32000 Then IniWrite($IniFile,"MainGUI","WinYPos",$WinPos[1])
If $WinPos[1] <> -32000 Then IniWrite($IniFile,"MainGUI","WinWidth",$WinPos[2])
If $WinPos[1] <> -32000 Then IniWrite($IniFile,"MainGUI","WinHeight",$WinPos[3])
If $TreePos[2] >= 20 Then IniWrite($IniFile,"MainGUI","TreeWidth",$TreePos[2])
Exit
EndFunc;==> _ExitApp()
Func _AddNewObjects() ; Add new Objects to Treeview/Listview with Drag 'n Drop
Local $SrcName
;_ArrayDisplay($gaDropFiles)
;MsgBox(0,"Ziel-Ordner",_TreePath($treeview,_GUICtrlTreeView_GetSelection($treeview)))
For $i=0 To UBound($gaDropFiles)-1
If StringInStr(FileGetAttrib($gaDropFiles[$i]),"D") Then
If DirCopy($gaDropFiles[$i],_TreePath($treeview,_GUICtrlTreeView_GetSelection($treeview)) & "\" & StringMid($gaDropFiles[$i],StringInStr($gaDropFiles[$i],"\",0,-1)+1)) = 0 Then
If Msgbox(52,"Fehler","Der Ordner '$gaDropFiles[$i]' konnte nicht fehlerfrei kopiert werden. Fortfahren ?") = 7 Then ExitLoop
EndIf
Else
If FileCopy($gaDropFiles[$i],_TreePath($treeview,_GUICtrlTreeView_GetSelection($treeview)) & "\" & StringMid($gaDropFiles[$i],StringInStr($gaDropFiles[$i],"\",0,-1)+1)) = 0 Then
If Msgbox(52,"Fehler","Die Datei '$gaDropFiles[$i]' konnte nicht fehlerfrei kopiert werden. Fortfahren ?") = 7 Then ExitLoop
EndIf
EndIf
Next
_FillFolder($treeview)
_ShowFolder($treeview,$listview,$gui)
EndFunc;==> _AddNewObjects()
Func _DelObjects() ; Delete selected Objects in Listview
Local $aSelItems
$aSelItems = _GUICtrlListView_GetSelectedIndices($listview,True)
If $aSelItems[0] > 0 And Msgbox(52,"Nachfrage","Sollen die markierten Dateien/Ordner wirklich gelöscht werden ?") = 6 Then
For $i=1 To $aSelItems[0]
If StringInStr(FileGetAttrib(_TreePath($treeview,_GUICtrlTreeView_GetSelection($treeview)) & "\" & _GUICtrlListView_GetItemText($listview,$aSelItems[$i])), "D") Then
If DirRemove(_TreePath($treeview,_GUICtrlTreeView_GetSelection($treeview)) & "\" & _GUICtrlListView_GetItemText($listview,$aSelItems[$i]), 1) = 0 Then
If Msgbox(52,"Fehler","Der Ordner '" & _TreePath($treeview,_GUICtrlTreeView_GetSelection($treeview)) & "\" & _GUICtrlListView_GetItemText($listview,$aSelItems[$i]) & "' konnte nicht gelöscht werden. Fortfahren ?") = 7 Then ExitLoop
EndIf
_GUICtrlTreeView_Delete($treeview, _GUICtrlTreeView_FindItem($treeview, _GUICtrlListView_GetItemText($listview,$aSelItems[$i]), False, _GUICtrlTreeView_GetSelection($treeview)))
Else
If FileDelete(_TreePath($treeview,_GUICtrlTreeView_GetSelection($treeview)) & "\" & _GUICtrlListView_GetItemText($listview,$aSelItems[$i])) = 0 Then
If Msgbox(52,"Fehler","Die Datei '" & _TreePath($treeview,_GUICtrlTreeView_GetSelection($treeview)) & "\" & _GUICtrlListView_GetItemText($listview,$aSelItems[$i]) & "' konnte nicht gelöscht werden. Fortfahren ?") = 7 Then ExitLoop
EndIf
EndIf
Next
EndIf
_FillFolder($treeview)
_ShowFolder($treeview,$listview,$gui)
EndFunc;==> _DelObjects()
Func _AddNewFolder() ; Add new Folder to Treeview/Listview with Contextmenue
Local $FolderName
$FolderName = InputBox("Ordnername ?", " ", "Neuer Ordner")
If FileExists(_TreePath($treeview,_GUICtrlTreeView_GetSelection($treeview)) & "\" & $FolderName) Then
Msgbox(49,"Fehler","Der Ordner '" & $FolderName & "' existiert bereits !")
Return
EndIf
If $FolderName <> "" Then
If DirCreate(_TreePath($treeview,_GUICtrlTreeView_GetSelection($treeview)) & "\" & $FolderName) = 0 Then
Msgbox(49,"Fehler","Der Ordner '" & $FolderName & "' konnte nicht erzeugt werden !")
Else
_FillFolder($treeview)
_ShowFolder($treeview,$listview,$gui)
EndIf
EndIf
EndFunc;==> _AddNewFolder()
Func _AddNewFile() ; Add new File to Listview with Contextmenue
Local $FileName
$FileName = InputBox("Dateiname ?", " ", "Neu.txt")
If FileExists(_TreePath($treeview,_GUICtrlTreeView_GetSelection($treeview)) & "\" & $FileName) Then
Msgbox(49,"Fehler","Die Datei '" & $FileName & "' existiert bereits !")
Return
EndIf
If $FileName <> "" Then
If FileWrite(_TreePath($treeview,_GUICtrlTreeView_GetSelection($treeview)) & "\" & $FileName, "") = 0 Then
Msgbox(49,"Fehler","Die Datei '" & $FileName & "' konnte nicht angelegt werden !")
Else
_FillFolder($treeview)
_ShowFolder($treeview,$listview,$gui)
EndIf
EndIf
EndFunc;==> _AddNewFile()
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) ;Notify func
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
$srctree = ControlGetHandle($hwnd,"",$treeview)
$srclist = ControlGetHandle($hwnd,"",$listview)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
If $iCode = -12 Or $iCode = -17 Then Return False
Switch $hWndFrom
Case $srclist
$item = _GetSelectedItems($gui,$listview,$treeview)
Switch $iCode
Case $NM_DBLCLK
If $item[0]<>0 Then
$filefolder = _GUICtrlListView_GetSelectedIndices($listview,True)
If _GUICtrlListView_GetItemText($listview,$filefolder[1],1) = "Folder" Then
$idx = _GUICtrlTreeView_GetSelection($treeview)
$item = StringTrimLeft($item[1],stringInstr($item[1],"\",0,-1))
$found = _GUICtrlTreeView_FindItem($treeview,$item,False,$idx)
_GUICtrlTreeView_SelectItem($treeview,$found)
_FillFolder($treeview)
_ShowFolder($treeview,$listview,$gui)
Else
ShellExecute($item[1])
EndIf
EndIf
Return TRUE
EndSwitch
Case $srctree
Switch $iCode
Case $NM_RCLICK
Local $tPOINT = _WinAPI_GetMousePos(True, $srctree)
Local $iX = DllStructGetData($tPOINT, "X")
Local $iY = DllStructGetData($tPOINT, "Y")
Local $hItem = _GUICtrlTreeView_HitTestItem($srctree, $iX, $iY)
If $hItem <> 0 Then _GUICtrlTreeView_SelectItem($srctree, $hItem, $TVGN_CARET)
Case -451
_FillFolder($treeview)
_ShowFolder($treeview,$listview,$gui)
Return TRUE
EndSwitch
Case Else
Switch $iCode
Case $NM_CLICK ; The user has clicked the left mouse button within the control
_SendMessage($gui, $WM_SYSCOMMAND, 0xF012, 2,1)
EndSwitch
EndSwitch
EndFunc;==> WM_NOTIFY
Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam)
Local $nSize, $pFileName
Local $nAmt = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', 0xFFFFFFFF, 'ptr', 0, 'int', 255)
For $i = 0 To $nAmt[0] - 1
$nSize = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', 0, 'int', 0)
$nSize = $nSize[0] + 1
$pFileName = DllStructCreate('wchar[' & $nSize & ']')
DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', DllStructGetPtr($pFileName), 'int', $nSize)
ReDim $gaDropFiles[$i + 1]
$gaDropFiles[$i] = DllStructGetData($pFileName, 1)
$pFileName = 0
Next
EndFunc ;==>WM_DROPFILES_FUNC
Leider konnte ich die GUIFrame-UDF dafür nicht nutzen, da die Größe der Frames nicht mit dem Parent-Fenster verändert werden. Dies nachzurüsten war mir zu aufwendig. Also verschiebe ich die Position zwischen TreeView und ListView auf herkömmliche Weise.
Nächste Stufe wird jetzt sein:
- Rekursives Kopieren von Ordnern (z.Zt. DirCopy()) auf Einzelschritte umstellen. Dies ist notwendig, da die Ordnernamen ja später auch verschlüsselt werden sollen.