Verschlüsselungstool für USB-Stick

  • Ich suchte einmal ein Tool mit folgenden Randbedingungen:

    - lauffähig ohne Installation und Adminrechten
    - also auch direkt vom USB-Stick
    - es soll dazu dienen, Dateien aufzunehmen und zu verschlüsseln,
    am besten auch den Dateinamen
    - dieses am besten per 'Drag And Drop'
    - nur einmal nach einem Passwort fragen
    - keine unnötigen unverschlüsselten Dateien auf die lokale Platte
    schreiben
    - möglicht AES256 unterstützen
    - Dateien per Doppelklick entschlüsseln und mit der verknüpften
    Anwendung öffnen

    Hört sich doch schonmal gut an, oder ?

    Selber in AutoIt schreiben scheiterte damals (ich hatte im Hilfe-Forum schonmal bei euch nachgefragt) schon daran, Dateien per 'Drag And Drop' in ein TreeView/Listview zu bekommen und möglichst auch wieder zurück in den Windows-Explorer. Hat mittlerweile jemand eine Idee oder ein Beispiel ???

    Nach langer Suche habe ich folgendes Freeware-Tool gefunden: PaDELCrypt
    Schaut es euch ruhig einfach mal an....

    Das Teil sieht wirklich brauchbar aus, nur beim Doppelklick auf eine Datei, öffnet sich nicht unbedingt das zugehörige Programm was der User ausgewählt hat, sondern das welches laut System/Admin vorgegeben wurde. Java halt ?( Außerdem wird entweder ein lokal installiertes Java benötigt, oder man muss die ganze Java-Installation auf dem USB-Stick mitbringen, was den Umfang des Tools ganz schön aufbläht.

    Hat jemand eine Idee wie ich die Oberfläche samt 'Drag And Drop' (IN/OUT) in AutoIt nachgebaut bekomme ?

    Besten Dank für eure Ideen...
    micha_he

    Edit: In einem neuen Beitrag geht es weiter... Verschlüsselungstools für USB-Stick (AKrypto)

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    3 Mal editiert, zuletzt von Micha_he (20. April 2010 um 21:24)

  • Ich schau mir Dein "Packer" mal an. Vielleicht ist das ja schon einmal ein erster größerer Schritt.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Der ZAP-Packer von Oscar war ja schon nicht schlecht, aber leider nur minimal für meinen Fall zu gebrauchen.

    Im englischen Forum habe ich dann ein einigermaßen passendes Beispiel für eine GUI gefunden und an meine Bedürfnisse angepasst, bzw mit den notwendigen Funktionen erweitert.

    Herausgekommen ist folgendes Script, welches im Prinzip ein offenes Explorerfenster simuliert. Kopieren von Dateien und Ordnern per Drap 'n Drop, Anlegen von Dateien und Ordnern per Kontextmenü, Löschen von einem oder mehreren Ordner und Dateien. Also im Prinzip nichts anderes, als das was ein Explorer auch könnte. Aber nun kann ich in diese Oberfläche die Verschlüsselung der Namen und Daten einbauen.

    Was ich an der Oberfläche noch ändern möchte, ist das ich die Trennposition zwischen TreeView und ListView verschieben und für den nächsten Programmstart speichern kann. Nur habe ich dazu im Moment keine Idee.

    Hier der FileBrowser:

    FileBrowser_TreeListView.au3
    [autoit]

    ; =========================================================
    ; 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.0
    ; Datum: 09.01.2010
    ; =========================================================

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

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <TreeViewConstants.au3>
    #include <ListViewconstants.au3>
    #include <GuiListView.au3>
    #include <GUITreeView.au3>
    #include <File.au3>
    #include <Array.au3>

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

    Global $arrFileIcons[1]=["shell32.dll"], $sortdir=0
    Global $gaDropFiles[1]
    Global $WM_DROPFILES = 0x233

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

    $gui = GUICreate("FileBrowser", 780, 348, -1, -1, $WS_SIZEBOX, BitOr($WS_EX_CLIENTEDGE, $WS_EX_ACCEPTFILES))
    $MainGroup = GUICtrlCreateGroup("", 8, 0, 764, 320, $WS_CLIPSIBLINGS)
    GUICtrlSetResizing($MainGroup, $GUI_DOCKLEFT+$GUI_DOCKRIGHT+$GUI_DOCKTOP+$GUI_DOCKBOTTOM)
    $treeview = GUICtrlCreateTreeView(16, 20, 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, 19, 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", 8) ;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

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

    _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

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

    ; *** Starte statt mit allen Laufwerken, nur mit Unterverzeichnis 'Vault' ***
    _GUICtrlTreeView_AddChild($treeview, "", @ProgramFilesDir, 0, 1)
    _GUICtrlTreeView_SelectItem($treeview, 0)
    _FillFolder($treeview)
    _ShowFolder($treeview, $listview, $gui)

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

    GUIRegisterMsg($WM_DROPFILES, 'WM_DROPFILES_FUNC')
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    ; Voreinstellungen versuchen zu laden
    Global $IniFile, $WinXPos, $WinYPos, $WinWidth, $WinHigh
    $IniFile = @ScriptDir & "\FileBrowser.ini"
    If FileExists($IniFile) Then
    $WinPos = WinGetPos($gui)
    $TrayPos = WinGetPos("[CLASS:Shell_TrayWnd]", "")
    $WinXPos = IniRead($IniFile,"MainGUI","WinXPos","")
    $WinYPos = IniRead($IniFile,"MainGUI","WinYPos","")
    $WinWidth = IniRead($IniFile,"MainGUI","WinWidth",$WinPos[2])
    $WinHigh = IniRead($IniFile,"MainGUI","WinHigh",$WinPos[3])
    If $WinXPos <> "" And $WinYPos <> "" Then
    If $WinXPos < 0 Then $WinXPos = 0
    If $WinYPos < 0 Then $WinYPos = 0
    If $WinXPos > (@DESKTOPWIDTH - $WinWidth) Then $WinXPos = @DESKTOPWIDTH - $WinWidth
    If $WinYPos > (@DESKTOPHEIGHT - $TrayPos[3] - $WinHigh) Then $WinYPos = @DESKTOPHEIGHT - $TrayPos[3] - $WinHigh
    WinMove($gui,"",$WinXPos,$WinYPos,$WinWidth,$WinHigh)
    EndIf
    EndIf

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

    GUISetState()

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

    While True
    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

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    Func _ExitApp()
    Local $WinPos = WinGetPos($gui)
    ; 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","WinHigh",$WinPos[3])
    Exit
    EndFunc;==> _ExitApp()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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])
    ;Run(@Comspec & " /c " & chr(34) & $item[1] & chr(34),"",@SW_HIDE)
    ;sleep(1500)
    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

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

    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

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

    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

    [/autoit]

    Falls jemand noch Fehler oder was zu verbessern findet, immer ran. Kann natürlich jeder in seinen Scripten weiterverwenden.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Habe ich mir gerade angesehen. Sieht vielversprechend aus.

    Werde demnächst mal schauen, ob es umsetzbar ist.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Hast du dir schonmal TrueCrypt angesehen?
    Davon gibt es auch eine portable Version. Es mountet eine Containerdatei als Netzlaufwerk, die verschlüsselung wird wieder aktiv wenn das Laufwerk ausgehangen wird (Im TrueCrypt programm).

    Die Anforderung "- Dateien per Doppelklick entschlüsseln und mit der verknüpften Anwendung öffnen" und portable schließen sich eigentlich aus,
    Programme die wirklich portable sind, ändern auch nicht die Registrierung.

  • TrueCrypt benötigt entweder eine vorherige Installationm oder Admin-Rechte auf dem Rechner. Letzteres betrifft leider auch die Portable-Edition.

    Wie sollte auch ein Nicht-Admin mittels eines Treibers, neue Laufwerke aus Images mounten ?

    Habe ich alles durchprobiert.

    Den zweiten Teil Deines Hinweises lasse ich mir nochmal durch den Kopf gehen. Da ist zum Teil etwas dran.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"


  • Die Anforderung "- Dateien per Doppelklick entschlüsseln und mit der verknüpften Anwendung öffnen" und portable schließen sich eigentlich aus,
    Programme die wirklich portable sind, ändern auch nicht die Registrierung.


    Für die DAteiverknüpfungen gibt es ein extra Tool. Das ändert dazu die Registry, soll diese danach aber wiederherstellen ;). http://portableapps.com/node/15583

  • 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
    [autoit]

    ; =========================================================
    ; 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
    ; =========================================================

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

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <TreeViewConstants.au3>
    #include <ListViewconstants.au3>
    #include <GuiListView.au3>
    #include <GUITreeView.au3>
    #include <File.au3>

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

    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

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

    $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", 8) ;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

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

    _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

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

    ; 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)

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

    GUIRegisterMsg($WM_DROPFILES, 'WM_DROPFILES_FUNC')
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    ; 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

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

    $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

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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()

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

    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

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

    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

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

    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

    [/autoit]

    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.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Hallo Forum

    Leider stockt das Projekt leider zur Zeit etwas, weil mir eine zündende Idee fehlt.

    Problem 1:
    Dateinamen mit AES256 verschlüsseln scheitert daran, das das Ergebnis einer AES-Verschlüsselung immer anders ist, auch wenn der Ausgangstext identisch ist. Daher kann ich nach der AES-Verschlüsselung nicht prüfen, ob ein idetischer Ordner bereits existiert. Meine Lösung zur Zeit: Pfad- und Dateinamen nur mit '_StringEncrypt()' zu verschlüsseln. Den Inhalt dann aber mit AES.

    Problem 2 (wichtig):
    Mit folgendem Code verschlüssele ich Pfad und Dateinamen.

    Spoiler anzeigen
    [autoit]

    #include <String.au3>

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

    $vaultDir = "C:\Vault\"
    $key = "test"
    $text = "C:\Vault\Dummy\Dummy\Test.txt"

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

    msgbox(0,"Beispiel", _Encrypt_Name($text))

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

    Func _Encrypt_Name($sName)
    Local $ret, $sOut, $aPathSplits, $sIdent = "*krypto*"
    Local $iPoiPos, $sTrailing
    If StringInStr($sName,$VaultDir) Then
    $sName = StringReplace($sName,$VaultDir,"")
    $sOut &= $VaultDir
    EndIf
    If StringLen($sName) > 0 Then
    If StringInStr($sName,"\") = 0 Then
    $sOut = _StringEncrypt(1, $sIdent & $sName, $key)
    Else
    If StringLeft($sName,1) = "\" Then
    $sName = StringMid($sName,2)
    $sOut &= "\"
    EndIf
    If StringRight($sName,1) = "\" Then
    $sTrailing = "\"
    $sName = StringTrimRight($sName, 1)
    EndIf
    $aPathSplits = StringSplit($sName,"\")
    If $aPathSplits[0] > 0 Then
    For $i = 1 To $aPathSplits[0]
    $ret = _StringEncrypt(1, $sIdent & $aPathSplits[$i], $key)
    If StringLen($ret) = "" Then Return
    $sOut &= $ret & "\"
    $ret = ""
    Next
    $sOut = StringTrimRight($sOut, 1)
    EndIf
    If $sTrailing <> "" Then $sOut &= $sTrailing
    EndIf
    EndIf
    If StringLen($sOut) > 0 Then Return $sOut
    Return
    EndFunc;==> _Enrypt_Name

    [/autoit]

    Der Nachteil ist aber, das die Ordner bzw. Dateinamen zu lang werden. Dem Text wird ein Identifier vorrangestellt was die Namen schon einmal verlängert (gut den Identifier könnte man noch etwas kürzen), aber der Binärstring nach der Verschlüsselung ist dann doppelt so lang wie der Ausgangsstring. Zurückwandeln nach ASCII geht auch nicht, da nicht alle Binärwerte als Pfad- / Dateinamen gültig sein.

    Jemand einen Tip wie ich einen kürzeren, brauchbar verschlüsselten Pfad- bzw. Dateinamen bekomme ?

    Besten Dank
    micha_he

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Wenn ich dich richtig verstanden habe dann willst du folgendes
    - Man muss auch im verschlüsselten Zustand prüfen können ob der Datei- oder Ordnername schon vorhanden ist.
    - Die Verschlüsselung soll "einigermaßen" sicher sein.
    - Datei und Ordnernamen gleich lang oder kürzer.

    Mir fallen da 2 Lösungen ein:
    1. Eine abgewandelte Form der Monoalphabetischen Verschlüsselung (gibt bestimmt einen Fachausdruck, den kenn ich aber nicht)

    Du nimmst als Alphabet den kompletten ascii Zeichensatz allerdings ohne die Zeichen die in Datei- und Ordnernamen nicht erlaubt sind.
    Anstatt jetzt wie bei der Caesar-Verschlüsselung das Substitutionsalphabet um eine feste Länge zu verschieben, gibt der Schlüssel (entsprechend dem Zeichen) an wie weit das Alphabet verschoben wird.
    Zusätzlich kann durch den Schlüssel die Richtung in die verschoben wird bestimmt werden (ungerade Zahl -> Nach rechts verschieben, gerade -> nach links)

    Ich versuch mal ein Beispiel:
    Text: A B C
    Alphabet: A B C D E F G [...]
    Schlüssel(ascii zahl): 0 1 2

    1. Zeichen: A wird auf A abgebildet weil das Alphabet um 0 Stellen verschoben wird
    2. Zeichen: B wird auf A abgebildet weil das Alphabet um 1 Stelle nach rechts verschoben wird und damit so aussieht: G A B C D E F
    3. Zeichen: C wird auf E abgebildet weil das Alphabet um 2 Stellen nach links verschoben wird und damit so aussieht: C D E F G A B

    Das xte Zeichen im Text wird durch das xte Zeichen im Alphabet ersetzt, ist der Text länger, muss ein entsprechender Zähler benutzt werden. Der Schlüssel wird auf die benötigte Länge hintereinander geschrieben.

    (Hoffe das war einigermaßen verständlich)

    Vorteil:
    Namen bleiben gleich lang
    Einigermaßen sicher weil eine Häufigkeitsanalyse nicht wirklich funktioniert
    Nachdem, ein Benutzer seinen Schlüssel eingegeben hat kann durch entschlüsseln geprüft werden ob der Ordner/Datei schon da ist

    Nachteil:
    Eben nur einigermaßen sicher
    Muss selbst geschrieben werden.


    2. Möglichkeit: Eine zusätzliche Datei speichert den Datei- oder Ordnernamen und den dazu passenden Hash. Anschließend wird sie mit AES verschlüsselt.
    Dateien und Ordner werden entsprechend dem Hash umbenannt.

    Vorteil:
    Funktionen sind schon da
    Sicher verschlüsselt
    Hat der Benutzer seinen Schlüssel eingegeben kann durch entschlüsseln der Datei geprüft werden ob der Ordner schon da ist
    Datei und Ordnernamen sind immer so lang wie der Hash

    Nachteil:
    Geht die Datei verloren/kaputt sind die Namen nicht wieder herstellbar.

  • Habe ich auch schon angedacht. Aber:

    Da das Tool in seiner Oberfläche ja die Originalen Namen anzeigen soll, müsste ich jeder Datei öffnen, einlesen, entschlüsseln und den originalen Dateinamen herauslesen. Das dauert bei einer großen Ordnerstruktur dann wohl zu lange.

    Und bei Verzeichnissen ? Hier müsste ich sogar für jeden Ordner eine zusätzliche Datei mit dem Namen anlegen. Ziemlich aufwendig !


    Aktuelle Versuche gehen daher eher in die Richtung:
    - verschlüsseln z.B. StringEncrypt() oder ggf. anderes verfahren
    - anschließend Base64 codieren

    oder gibt es noch andere Ideen ?

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"