1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. sascha382

Beiträge von sascha382

  • Kleines Backup-Tool

    • sascha382
    • 30. August 2017 um 15:03

    Danke für deine Mühe :). Ich gucks mir bei Gelegenheit an, schaffe das zeitlich gerade nicht.

  • Backup Tool(chen)

    • sascha382
    • 30. August 2017 um 15:02

    Ein erster kurzer Test (Quelle: C:\Users\sascha\Downloads\1; Ziel: @ScriptDir) hat leide rnicht funktioniert :-/ Ich gucks mir nochmal genauer an, wenn ich die Zeit dazu finde.

  • Kleines Backup-Tool

    • sascha382
    • 28. August 2017 um 20:00

    Gute Idee! Danke erstmal, aber ich denke ich werde eher Richtung robocopy weiterschauen... Das Programm beinhaltet alles was ich brauche und bietet auch noch Monitoring. Vielleicht schreibe ich mir dazu eine kleine AutoIT GUI um das besser zu steuern :).

  • Kleines Backup-Tool

    • sascha382
    • 25. August 2017 um 15:13
    Zitat von alpines

    Was genau willst du denn machen? Möchtest du ein Backup erstellen und die Dateien einfach überschreiben oder möchtest du verschiedene Versionen von Dateien haben?

    Ich möchte, dass er mir alle geänderten Dateien überschreibt und alle Dateien die im Zielordner sind, aber nicht mehr im Quellordner, löscht.

    Beispiel:
    Datei A hat sich geändert
    Datei B wurde gelöscht
    Datei C bleibt unverändert

    Beim Backup wird dann Datei A überschrieben, Datei B im Zielordner gelöscht und mit Datei C passiert gar nichts. :)

  • Kleines Backup-Tool

    • sascha382
    • 25. August 2017 um 14:21
    Zitat von alpines

    Das ist doch eine super Gelegenheit mal deine AutoIt-Kentnisse zu verbessern!

    Deine Idee bisher klingt nicht schlecht, eine GUI zum Auswählen der Pfade und zum Anzeigen des Fortschrittes.
    Allerdings gibt es da ziemlich viele Möglichkeiten wie du das ganze bewerkstelligen kannst. Kopierfunktionen mit ProgressBars gibt es glaube ich zu hauf also einfach mal danach googlen.
    Sollte robocopy den aktuellen Fortschritt in der Konsole anzeigen, so könntest du auch einfach robocopy starten und die Ausgabe in die Konsole auslesen zu anzeigen.
    https://www.autoitscript.com/forum/topic/11888-yet-another-copy-with-progress/#

    Das gleich sollte auch für die TreeView gelten, einfach mal googlen und schauen was du so findest.
    Du könntest natürlich jede Funktion selber schreiben, aber das kostet einfach zu viel Zeit wenn du nur das Ergebnis haben möchtest.
    Treeview FileExplorer

    Wenn man bisschen googlelt, so findet man eigentlich ziemlich schnell brauchbare Sachen.

    So, habe mich mal daran versucht und dabei ist das zustande gekommen:

    AutoIt: BackMeUp.au3
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=icon.ico
    #AutoIt3Wrapper_Outfile=BackMeUp.Exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    #include "C:\Data\00_Dokumente\AutoIt\UDFs\CopyWithProgress\CopyWithProgress.au3"
    #Region ### START Koda GUI section ### Form=c:\data\00_dokumente\autoit\eigene tools\laptop backup\fmmain.kxf
    $formMain = GUICreate("BackMeUp", 601, 623, -1, -1)
    GUISetIcon("C:\Data\00_Dokumente\AutoIt\Eigene Tools\Laptop Backup\icon.ico", -1)
    $groupSource = GUICtrlCreateGroup("Quellen", 10, 10, 580, 295)
    $editSource = GUICtrlCreateEdit("", 20, 25, 560, 270)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $groupDestination = GUICtrlCreateGroup("Zielpfad", 10, 315, 580, 51)
    $inputDestination = GUICtrlCreateInput("", 20, 335, 560, 21)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $checkboxClean = GUICtrlCreateCheckbox("Zielordner vorab säubern", 10, 375, 580, 17)
    GUICtrlSetState(-1, $GUI_UNCHECKED)
    $buttonStart = GUICtrlCreateButton("Backup starten", 10, 400, 580, 50)
    $editLog = GUICtrlCreateEdit("", 10, 460, 580, 150, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY))
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    
    
    Global $sourcesTXT = @ScriptDir & "\sources.txt"
    Global $destinationTXT = @ScriptDir & "\destination.txt"
    
    
    ;Erstelle TXT-Dateien mit Quellen und Zielen, wenn diese nicht vorhanden sind
    If FileExists($sourcesTXT) = False Then
    	FileWrite($sourcesTXT, "C:\Data\")
    EndIf
    If FileExists($destinationTXT) = False Then
    	FileWrite($destinationTXT, "P:\BackMeUp\")
    EndIf
    
    
    ;Schreibe die Daten aus den TXT-Dateien in die Controls
    GUICtrlSetData($editSource, FileRead($sourcesTXT))
    GUICtrlSetData($inputDestination, FileRead($destinationTXT))
    
    
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case $buttonStart
    			GUICtrlSetData($editLog, "")
    			GUICtrlSetState($buttonStart, $GUI_DISABLE)
    
    
    			;Quellen und Ziele sichern
    			GUICtrlSetData($editLog, GUICtrlRead($editLog) & "Sichere Quellpfade und Zielordnerpfad... ")
    			FileDelete($sourcesTXT)
    			FileWrite($sourcesTXT, GUICtrlRead($editSource))
    			FileDelete($destinationTXT)
    			FileWrite($destinationTXT, GUICtrlRead($inputDestination))
    			GUICtrlSetData($editLog, GUICtrlRead($editLog) & "OK" & @CRLF)
    
    
    			;Zielordner saeubern
    			If _IsChecked($checkboxClean) Then
    				GUICtrlSetData($editLog, GUICtrlRead($editLog) & "Lösche alle Dateien im Zielordner... ")
    
    
    				$folders = _FileListToArray(GUICtrlRead($inputDestination))
    
    
    				For $i = 0 To UBound($folders) - 1
    					If $folders[$i] = "mail" Then
    
    
    					Else
    						DirRemove(GUICtrlRead($inputDestination) & $folders[$i], 1)
    					EndIf
    				Next
    
    
    				GUICtrlSetData($editLog, GUICtrlRead($editLog) & "OK" & @CRLF)
    			EndIf
    
    
    			;Backup durchfuehren
    
    
    			$sources = StringSplit(GUICtrlRead($editSource), @CRLF, 3)
    			$destination = GUICtrlRead($inputDestination)
    			For $i = 0 To UBound($sources) - 1
    				GUICtrlSetData($editLog, GUICtrlRead($editLog) & "Kopiere " & $sources[$i] & " nach " & $destination & "... ")
    				$n = _CopyWithProgress($sources[$i], $destination)
    				If $n = False Then
    					GUICtrlSetData($editLog, GUICtrlRead($editLog) & "Fehler" & @CRLF)
    				Else
    					GUICtrlSetData($editLog, GUICtrlRead($editLog) & "Erfolg" & @CRLF)
    				EndIf
    			Next
    			GUICtrlSetData($editLog, GUICtrlRead($editLog) & "Das Backup ist abgeschlossen." & @CRLF)
    			ShellExecute('"' & GUICtrlRead($inputDestination) & '"')
    			GUICtrlSetState($buttonStart, $GUI_ENABLE)
    	EndSwitch
    WEnd
    
    
    Func _IsChecked($idControlID)
        Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
    EndFunc   ;==>_IsChecked
    Alles anzeigen

    Es tut soweit seinen Job. Allerdings würde ich gerne mindestens die Funktion "Lösche Zielordner" durch "Lösche veraltete Dateien" ersetzen ... Weiß aber noch nicht so ganz wie ich das hinbekomme :D...

  • Kleines Backup-Tool

    • sascha382
    • 25. August 2017 um 08:53

    Hallo zusammen,

    vorab: Sollte ich im falschen Forum sein, dann tut es mir leid!

    Was habe ich vor?
    In meiner Firma haben viele Mitarbeite rienen Laptop. Auf dem Laptop werden lokal alle "Eigenen Dateien" gesichert. Es gibt ein kleines Backup-Programm (ebenfalls in Autoit geschrieben, aber nicht von mir), welches die Daten aus dem Benutzerordner auf ein Netzlaufwerk kopiert. Das Problem dabei ist: Es sieht unschön aus, gibt keine Informationen und erlaubt keine Einstellungen. Zusätzlich kopiert es stumpf alle Dateien rüber die sich geändert haben, lässt jedoch gelöschte Dateien bestehen (das nervt). Das Programm bedient sich der Windows eigenen Funktion robocopy. Das Skript steht mir leide rnicht zur Verfügung.
    Ich möchte ein eigenes Backup Programm schreiben, das mir ein paar Einstellungen erlaubt. Beispielsweise: Kopiere alle Änderungen und lösche gelöschte Dateien auf dem Netzlaufwerk.

    Was brauche ich dafür?

    Für die Umsetzung fehlen mir ein paar Dinge.

    • Eine vernünftige Funktion zum Kopieren von Daten, mit Einstellungsmöglichkeiten und optimalerweise einer ProgressBar. (Ich habe das Skript von Oscar gefunden, allerdings ist das noch zu simple denke ich. Meine Erfahrung in Autoit reicht auch nicht aus um das alles zu verstehen...)
    • Eine TreeView, die ich in meine GUI implementieren kann und mir erlaubt per Checkbox die Pfade auszuwählen, die gesichert werden sollen. (Auch hier habe ich dieses Skript von oscar gefunden. Aber das ist leider nicht ganz ausgereift.)

    Da ich leider immer noch Anfänger bin, weiß ich nicht wirklich wonach ich suchen muss.. Kennt Ihr schon fertige UDFs / Beispiele / Skripte, wo so etwas umgesetzt worden ist? Ich erwarte hier keine fertige Lösung :D ! Ich freue mich über jeden Schnipsel Code der mir weiterhelfen könnte.

    Danke!

  • TreeView zur Auswahl mehrerer Ordner

    • sascha382
    • 7. Oktober 2016 um 19:21

    Hallo Oscar,

    vielen Dank für deine Hilfe, funktioniert super! :)

    Ich guck mal wie ich das Skript insgesamt besser aufbauen kann und versuche dann den FileTree mit deinen Funktionen zu integrieren.
    Um den Code 100% zu verstehen brauche ich noch etwas, aber soweit ist das Thema dann gelöst, danke sehr! :D

    Sascha

  • TreeView zur Auswahl mehrerer Ordner

    • sascha382
    • 7. Oktober 2016 um 11:06

    Hallo zusammen,

    ich bin ganz neu hier im Forum und brauche direkt mal eure Hilfe / Unterstützung:

    Ich schreibe gerade ein kleines Skript für meine Eltern, dass die wichtigsten Ordner und Dateien auf ihrem Computer auf einer externen Festplatte sichert. Das ganze funktioniert soweit schon ganz gut und läuft wie folgt ab:

    • Beim ersten Start des Programms (das sich auf der externen Festplatte befindet) wird ein Ordner "Backups" mit einem Unterordner "Computername", im Skriptverzeichnis, angelegt.
    • Anschließend wird eine settings.ini für diesen PC erzeugt, die ein paar Informationen enthält.
    • Dann wird eine paths.txt erzeugt, die erstmal leer ist aber später pro Zeile einen Pfad enthalten soll, der dann mitgesichert wird.
    • Wenn man möchte kann man das Backup zippen lassen, dann werden halt alle Dateien in eine .zip gepackt und der normale Sicherungsordner wird wieder gelöscht.
    AutoIt: DataSaverX.au3
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=Bilder\logo.ico
    #AutoIt3Wrapper_Outfile=DataSaver 1.0.Exe
    #AutoIt3Wrapper_Res_Fileversion=1.0
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <GuiStatusBar.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #include <File.au3>
    #include <Array.au3>
    #include <zip.au3>
    ;Hauptfenster
    $formMain = GUICreate("DataSaver 1.0", 307, 124, -1, -1)
    $menuMainItem1 = GUICtrlCreateMenu("&Datei")
    $menuMainItem1Item1 = GUICtrlCreateMenuItem("Zu sichernde Objekte auswählen", $menuMainItem1)
    $menuMainItem2 = GUICtrlCreateMenu("&Optionen")
    $menuMainItem2Item1 = GUICtrlCreateMenuItem("Komprimiere das Backup (.zip)", $menuMainItem2)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $menuMainItem3 = GUICtrlCreateMenu("?")
    $statusbarMain = _GUICtrlStatusBar_Create($formMain)
    Dim $statusbarMain_PartsWidth[1] = [-1]
    _GUICtrlStatusBar_SetParts($statusbarMain, $statusbarMain_PartsWidth)
    _GUICtrlStatusBar_SetText($statusbarMain, "", 0)
    $iconArchiv = GUICtrlCreateIcon("F:\OneDrive\Dokumente\Projekte\DataSaverX\Bilder\archiv.ico", -1, 232, 10, 64, 64)
    $iconSpeichern = GUICtrlCreateIcon("F:\OneDrive\Dokumente\Projekte\DataSaverX\Bilder\speichern.ico", -1, 10, 10, 64, 64)
    $iconINI = GUICtrlCreateIcon("F:\OneDrive\Dokumente\Projekte\DataSaverX\Bilder\ini.ico", -1, 158, 10, 64, 64)
    $iconTXT = GUICtrlCreateIcon("F:\OneDrive\Dokumente\Projekte\DataSaverX\Bilder\txt.ico", -1, 84, 10, 64, 64)
    ;Globale Variablen
    Global $pfadSicherungsordnerMain = @ScriptDir & "\Backups\" & @ComputerName
    Global $pfadINI = $pfadSicherungsordnerMain & "\settings.ini"
    Global $pfadTXT = $pfadSicherungsordnerMain & "\paths.txt"
    Global $ordner
    ;Start des Programms
    DirCreate($pfadSicherungsordnerMain)
    IniWrite($pfadINI, "Allgemein", "Computername", @ComputerName)
    If Not FileExists($pfadTXT) Then
    	FileWrite($pfadTXT, "")
    	MsgBox(64, "Information", "Es wurde eine neue paths.txt für diesen PC angelegt.")
    EndIf
    If IniRead($pfadINI, "Einstellungen", "ZIP", "no") = "yes" Then
    	GUICtrlSetState($menuMainItem2Item1, $GUI_CHECKED)
    Else
    	GUICtrlSetState($menuMainItem2Item1, $GUI_UNCHECKED)
    EndIf
    _mainGUI(1)
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case $iconSpeichern
    			GUICtrlSetPos($iconSpeichern, 26, 26, 32, 32)
    			Sleep(150)
    			GUICtrlSetPos($iconSpeichern, 10, 10, 64, 64)
    			If Not _FileReadToArray($pfadTXT, $ordner) Then
    				MsgBox(16, "Fehler", "Du musst erst Ordner eintragen die übertragen werden sollen!")
    				ShellExecute($pfadTXT)
    			Else
    				IniWrite($pfadINI, "Allgemein", "Sicherungen", IniRead($pfadINI, "Allgemein", "Sicherungen", "0") + 1)
    				$time = @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & "-" & @MIN
    				IniWrite($pfadINI, "Letzte Sicherung", "Zeitpunkt", $time)
    				$pfadSicherungsordnerHeute = $pfadSicherungsordnerMain & "\" & $time
    				DirCreate($pfadSicherungsordnerHeute)
    				For $x = 1 To $ordner[0]
    					$pfadSicherungsordnerHeuteOrdner = $pfadSicherungsordnerHeute
    					$einzelordner = StringSplit($ordner[$x], "\")
    					$einzelordner[1] = StringTrimRight($einzelordner[1], 1)
    					For $y = 1 To $einzelordner[0]
    						$pfadSicherungsordnerHeuteOrdner = $pfadSicherungsordnerHeuteOrdner & "\" & $einzelordner[$y]
    					Next
    					_GUICtrlStatusBar_SetText($statusbarMain, "Kopiere " & $ordner[$x], 0)
    					$pid = Run("cmd /c """ & 'robocopy ' & '"' & $ordner[$x] & '" "' & $pfadSicherungsordnerHeuteOrdner & '" /MIR' & """", "", @SW_HIDE, 6)
    				Next
    				Sleep(500)
    				If IniRead($pfadINI, "Einstellungen", "ZIP", "no") = "yes" Then
    					_GUICtrlStatusBar_SetText($statusbarMain, "Backup wird gezippt...", 0)
    					$zip = _Zip_Create($pfadSicherungsordnerHeute & ".zip")
    					_Zip_AddFolderContents($zip, $pfadSicherungsordnerHeute)
    					DirRemove($pfadSicherungsordnerHeute, 1)
    					Sleep(500)
    					ShellExecute($zip)
    				Else
    					ShellExecute($pfadSicherungsordnerHeute)
    				EndIf
    				_GUICtrlStatusBar_SetText($statusbarMain, "Backup wurde erfolgreich beendet.", 0)
    			EndIf
    			;Zeigt das Array an: _ArrayDisplay($ordner)
    		Case $iconTXT
    			GUICtrlSetPos($iconTXT, 100, 26, 32, 32)
    			Sleep(150)
    			GUICtrlSetPos($iconTXT, 84, 10, 64, 64)
    			ShellExecute($pfadTXT)
    		Case $iconINI
    			GUICtrlSetPos($iconINI, 174, 26, 32, 32)
    			Sleep(150)
    			GUICtrlSetPos($iconINI, 158, 10, 64, 64)
    			ShellExecute($pfadINI)
    		Case $iconArchiv
    			GUICtrlSetPos($iconArchiv, 248, 26, 32, 32)
    			Sleep(150)
    			GUICtrlSetPos($iconArchiv, 232, 10, 64, 64)
    			ShellExecute($pfadSicherungsordnerMain)
    		Case $menuMainItem1Item1
    			;FileTree
    		Case $menuMainItem2Item1
    			If BitAND(GUICtrlRead($menuMainItem2Item1), $GUI_CHECKED) = $GUI_CHECKED Then
    				GUICtrlSetState($menuMainItem2Item1, $GUI_UNCHECKED)
    				IniWrite($pfadINI, "Einstellungen", "ZIP", "no")
    			Else
    				GUICtrlSetState($menuMainItem2Item1, $GUI_CHECKED)
    				IniWrite($pfadINI, "Einstellungen", "ZIP", "yes")
    			EndIf
    	EndSwitch
    WEnd
    Func _mainGUI($visibility)
    	If $visibility Then
    		GUISetState(@SW_SHOW, $formMain)
    	Else
    		GUISetState(@SW_HIDE, $formMain)
    	EndIf
    EndFunc
    Alles anzeigen


    Das ganze ist natürlich noch nicht 100% optimal, dient mir aber als Einsteigerprojekt :P ! Ich habe auch vor es stetig weiterzuentwickeln.

    Nun möchte ich noch einen FileTree anzeigen lassen, wenn man unter "Datei -> Zu sichernde Objekte auswählen" klickt. Dieser soll alle Ordner und Dateien anzeigen, mit "+" bzw. "-" und einer Checkbox vor dem Datei-/Ordnernamen.
    Auch dafür habe ich schon ein Skript gefunden, allerdings hapert es jetzt daran auszulesen welche Einträge alle markiert wurden und diese dann in die paths.txt zu schreiben.


    AutoIt: _GUICtrlTreeView_FileExplorer.au3
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseX64=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiTreeView.au3>
    #include <StructureConstants.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    
    
    Opt('MustDeclareVars', 1)
    
    
    Global $hGui = GUICreate('FileExplorer', 600, 600)
    
    
    Global Const $Delim = '\', $Delim1 = '|'
    
    
    Global $hTreeview = GUICtrlCreateTreeView(5, 5, 590, 500, BitOR($TVS_CHECKBOXES, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT))
    Global $hWndTreeview = GUICtrlGetHandle($hTreeview)
    Global $hOk = GUICtrlCreateButton('Ok', 240, 510, 60, 22)
    Global $hCancel = GUICtrlCreateButton('Cancel', 320, 510, 60, 22)
    
    
    Global $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', 8) ; 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, BitOR($WS_EX_COMPOSITED, $WS_EX_CLIENTEDGE))
    
    
    If ToolTip('Please wait...', Default, Default, 'Read Directory', 1) Then Local $aDrives = DriveGetDrive('ALL'), $iLWindex, $hRoot
    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
    	If _GUICtrlTreeView_BeginUpdate($hTreeview) And _GUICtrlTreeView_FileExplorer($hTreeview, $hRoot, $aDrives[$i]) Then _GUICtrlTreeView_EndUpdate($hTreeview)
    Next
    ToolTip('')
    
    
    GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
    While True
    	Switch GUIGetMsg()
    		Case $GUI_EVENT_CLOSE, $hCancel
    			Exit
    		Case $hOk
    			MsgBox(0, 'Selected Path/File', StringReplace(_GUICtrlTreeView_GetTree($hTreeview, _GUICtrlTreeView_GetSelection($hTreeview)), $Delim1, $Delim))
    		Case $hTreeview
    			If _GUICtrlTreeView_GetChecked($hTreeview, _GUICtrlTreeView_GetSelection($hTreeview)) Then
    				MsgBox(0, "", _GUICtrlTreeView_GetSelection($hTreeview) & " wurde gecheckt.")
    			Else
    				MsgBox(0, "", _GUICtrlTreeView_GetSelection($hTreeview) & " wurde ungecheckt.")
    			EndIf
    	EndSwitch
    WEnd
    
    
    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    	Local $hChild, $hITEM, $tNMTREEVIEW = DllStructCreate($tagNMTREEVIEW, $ilParam)
    	If DllStructGetData($tNMTREEVIEW, 'hWndFrom') = $hWndTreeview Then
    		Switch DllStructGetData($tNMTREEVIEW, 'Code')
    			Case $TVN_ITEMEXPANDINGA, $TVN_ITEMEXPANDINGW
    				Switch DllStructGetData($tNMTREEVIEW, 'Action')
    					Case $TVE_EXPAND
    						If ToolTip('Please wait...', Default, Default, 'Read Directory', 1) Then $hITEM = DllStructGetData($tNMTREEVIEW, 'NewhItem')
    						If _GUICtrlTreeView_GetExpanded($hTreeview, $hITEM) Then Return $GUI_RUNDEFMSG
    						$hChild = _GUICtrlTreeView_GetFirstChild($hTreeview, $hITEM)
    						If Not $hChild Then Return $GUI_RUNDEFMSG
    						If _GUICtrlTreeView_BeginUpdate($hTreeview) Then _GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    						_GUICtrlTreeView_FileExplorer($hTreeview, $hChild, StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), $Delim1, $Delim))
    						Do
    							$hChild = _GUICtrlTreeView_GetNextChild($hTreeview, $hChild)
    							If Not $hChild Then ExitLoop
    							_GUICtrlTreeView_DeleteChildren($hTreeview, $hChild)
    							_GUICtrlTreeView_FileExplorer($hTreeview, $hChild, StringReplace(_GUICtrlTreeView_GetTree($hTreeview, $hChild), $Delim1, $Delim))
    						Until False
    						If _GUICtrlTreeView_EndUpdate($hTreeview) Then ToolTip('')
    				EndSwitch
    		EndSwitch
    	EndIf
    	Return $GUI_RUNDEFMSG
    EndFunc   ;==>_WM_NOTIFY
    
    
    Func _GUICtrlTreeView_FileExplorer($hTreeview, $hITEM, $sPath)
    	Local $sFileList, $sFolderList, $aDirList, $hSearch, $sFile
    	Local $iHidden = RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced', 'Hidden') - 1
    	Local $iSuperHidden = Not RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced', 'ShowSuperHidden')
    	$hSearch = FileFindFirstFile($sPath & $Delim & '*')
    	If $hSearch = -1 Then Return True
    	Do
    		$sFile = FileFindNextFile($hSearch)
    		If @error Then ExitLoop
    		Switch @extended
    			Case False
    				If $iHidden And StringInStr(FileGetAttrib($sPath & $Delim & $sFile), 'H') Then ContinueLoop
    				If $iSuperHidden And StringInStr(FileGetAttrib($sPath & $Delim & $sFile), 'S') Then ContinueLoop
    				$sFileList &= $sFile & $Delim1
    			Case True
    				If _IsReparsePoint($sPath & $Delim & $sFile) Then ContinueLoop
    				$sFolderList &= $sFile & $Delim1
    		EndSwitch
    	Until False
    	FileClose($hSearch)
    	If $sFolderList & $sFileList = '' Then Return True
    	$aDirList = StringSplit(StringTrimRight($sFolderList & $sFileList, 1), $Delim1, 2)
    	For $sFile In $aDirList
    		If StringInStr(FileGetAttrib($sPath & $Delim & $sFile), 'D') Then
    			_GUICtrlTreeView_AddChild($hTreeview, $hITEM, $sFile, 0, 1)
    		Else
    			_GUICtrlTreeView_AddChild($hTreeview, $hITEM, $sFile, 2, 2)
    		EndIf
    	Next
    	Return True
    EndFunc   ;==>_GUICtrlTreeView_FileExplorer
    
    
    Func _IsReparsePoint($FLS) ; progandy
    	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   ;==>_IsReparsePoint
    Alles anzeigen

    Wenn das funktioniert wäre es natürlich auch schön, wenn man beim Starten des TreeViews sieht welche Ordner schon in der paths.txt stehen, sprich dass diese Elemente bereits angehackt werden. Das ist aber nicht unbedingt notwendig!

    Ich bin dankbar für jede Hilfe! ^^

    Danke,
    Sascha

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™