Verzeichnis in eine Listbox

  • Hallo NG,

    in Sachen AutoIT bin ich leider ein Absoluter Noob ;(
    Ich würde mir gerne ein Script basteln (nach und nach), dass per Button Click ein Verzeichnis in eine Listbox einliest, danach sollen die einzelnen Einträge (wie im Explorer) selektierbar und ausführbar sein.

    Gibt es hier vielleicht schon ein Script oder einen Threat, der dieses oder ähnliches behandelt hat?

    Hintergrund ist folgender: ich möchte gerne Text- oder PDF-Dateien (die in unterschiedlichen Ordnern) auf einem USB Stick sind, in einer Listbox anzeigen lassen und somit eine schnelle und einfachere Art der Auswahl zum Öffnen haben.

    --------------------

    Mein erstes Problem ist, dass ich mir zwar mittels der folgenden Zeile sämtliche Textdateien (beispiel) in die Variable $FileList schreiben kann, aber ich kriege die Liste nicht in die Listbox rein

    [autoit]

    $FileList = _FileListToArray($folderName, "*.txt", 1)

    [/autoit]

    Versuch den Inhalt von $FileList in die Listbox zu bringen:

    [autoit]

    GUICtrlSetData($List1, $FileList)

    [/autoit]

    Die Listbox habe ich so definiert:

    [autoit]

    $List1 = GUICtrlCreateList("", 8, 64, 417, 279, BitOR($LBS_SORT,$LBS_STANDARD,$WS_HSCROLL,$WS_VSCROLL,$WS_BORDER))

    [/autoit]

    ---------------------

    Grüße
    Tim

  • Hallo,

    dazu ist _GetFilesFolder_Rekursiv() sehr praktisch.
    siehe hier

    ok das funktioniert eigentlich prima, aber wie kann verhindern, dass sämtliche Dateien in der Listbox in einer Zeile erscheinen und nicht wie beispielsweise bei einer Consolen-Ausgabe untereinander -> ConsoleWrite($filesInFolder222 & @CRLF)?
    Ist es möglich nur die Filenamen angezeigt zu bekommen?

    Ein weiteres Problem wäre die Auswahl mittels Mausklick auf einen Eintrag in der Listbox? D.h. wie weise ich dem "MouseClick" die einzlnen Zeilen zu ?
    Die Syntax von MouseClick wäre ja: MouseClick ( "button" [, x, y [, clicks [, speed ]]] ) Muss hier anstelle von "button" die Einträge der Listbox gesetzt werden? Oder bin ich hier auf dem Holzweg?

    Momentan siehts so aus:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    ; Variable
    $filesIn111 = _GetFilesFolder_Rekursiv('111', 'txt', 0, 1)
    $filesIn222 = _GetFilesFolder_Rekursiv('222', 'txt', 0, 1)

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

    #Region ### START GUI section ### Form=c:\users\rs\desktop\auit\start\form1.kxf
    $Form1_1 = GUICreate("Form1", 436, 388, 261, 124)
    $List1 = GUICtrlCreateList("", 8, 64, 417, 279, BitOR($LBS_SORT,$LBS_STANDARD,$WS_HSCROLL,$WS_VSCROLL,$WS_BORDER))
    $Button1 = GUICtrlCreateButton("&Öffnen", 176, 352, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("111", 8, 32, 75, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("222", 88, 32, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END GUI section ###

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Button1
    MsgBox(0, 'Öffnen', 'Button 1 was pressed')

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

    Case $msg = $Button2
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesIn111) Then

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

    _ArrayDisplay($filesIn111, 'Rekursiv alle au3-Dateien')
    Else
    GUICtrlSetData($List1, $filesIn111 & @CRLF)
    EndIf

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

    Case $msg = $Button3
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesIn222) Then

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

    _ArrayDisplay($filesIn222, 'Rekursiv alle au3-Dateien')
    Else
    GUICtrlSetData($List1, $filesIn222 & @CRLF)
    EndIf
    EndSelect
    WEnd

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s):$sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück (Einträge @LF-getrennt)
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0)
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles,1), @LF)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles,1)
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1)
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & @LF
    Else
    $strFiles &= $file.Path & @LF
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & @LF
    _ShowSubFolders($Subfolder, $Ext, $Dir)
    Next
    EndFunc

    [/autoit]


    zur Info:
    Es gibt zwei Verzeichnisse "111" und "222" in diesem befinden sich beispielsweise jeweils 3x ".txt" Dokumente die in die Listbox je nach dem welcher Button geklickt wird (Button2 oder Button3) eingelesen werden.

    Grüße
    Tim

    2 Mal editiert, zuletzt von Gwyn (21. Mai 2010 um 01:48)

  • Bekomm dein Beispiel auf die Schnelle nicht zum laufen.
    Um die Pade in die Listbox zu bekommen bietet sich eine FOR-Schleife an die das Array durchläuft.

    &quot;kleines Beispiel&quot;
    [autoit]

    #include<Array.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 241, 127, 192, 124)
    $List1 = GUICtrlCreateList("", 8, 8, 121, 97)
    $Button1 = GUICtrlCreateButton("Button1", 136, 8, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $ret = _GetFilesFolder_Rekursiv('k:\', 'exe', 0, 0)
    If IsArray($ret) Then
    For $i = 1 To UBound($ret) - 1
    GUICtrlSetData($List1, $ret[$i])
    Next
    Else
    GUICtrlSetData($List1, "keine Daten")
    EndIf
    EndSwitch
    WEnd

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $iRetType = 0, $sDelim = '0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc ;==>_GetFilesFolder_Rekursiv

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

    Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $Delim = @CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc ;==>_ShowSubFolders

    [/autoit]

    edit: auch wenn Schnitzel jetzt schon gepostet hat - hab da vorher 2 Skripte inneinanderkopiert, deshlab lief deins nicht auf Anhieb ^^

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    ; Variable
    $filesIn111 = _GetFilesFolder_Rekursiv('k:\', '*', 0, 0)
    $filesIn222 = _GetFilesFolder_Rekursiv('k:\', '*', 0, 0)

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

    #Region ### START GUI section ### Form=c:\users\rs\desktop\auit\start\form1.kxf
    $Form1_1 = GUICreate("Form1", 436, 388, 261, 124)
    $List1 = GUICtrlCreateList("", 8, 64, 417, 279, BitOR($LBS_SORT,$LBS_STANDARD,$WS_HSCROLL,$WS_VSCROLL,$WS_BORDER))
    $Button1 = GUICtrlCreateButton("&Öffnen", 176, 352, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("111", 8, 32, 75, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("222", 88, 32, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END GUI section ###

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Button1
    ShellExecute(GUICtrlRead($List1))
    Case $msg = $Button2
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesIn111) Then
    For $i = 1 To UBound($filesIn111)-1
    GUICtrlSetData($List1, $filesIn111[$i])
    Next
    EndIf
    Case $msg = $Button3
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesIn222) Then
    For $i = 1 To UBound($filesIn222)-1
    GUICtrlSetData($List1, $filesIn222[$i])
    Next
    EndIf
    EndSelect
    WEnd

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt = '*', $iDir = -1, $iRetType = 0, $sDelim = '0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath), $sExt, $iDir, $sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc ;==>_GetFilesFolder_Rekursiv

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

    Func _ShowSubFolders($Folder, $Ext = '*', $Dir = -1, $Delim = @CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc ;==>_ShowSubFolders

    [/autoit]


    Pfad und Dateifilter müsstest du halt nach Bedarf anpassen.

  • dann solteste aber auch den parameter 0 für arrayrückgabe verwenden
    und nen gültigen pfad statt 111 und 222 eintragen

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    ; Variable
    $filesIn111 = _GetFilesFolder_Rekursiv('111', 'txt', 0, 0)
    $filesIn222 = _GetFilesFolder_Rekursiv('222', 'txt', 0, 0)

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

    #Region ### START GUI section ### Form=c:\users\rs\desktop\auit\start\form1.kxf
    $Form1_1 = GUICreate("Form1", 436, 388, 261, 124)
    $List1 = GUICtrlCreateList("", 8, 64, 417, 279, BitOR($LBS_SORT,$LBS_STANDARD,$WS_HSCROLL,$WS_VSCROLL,$WS_BORDER))
    $Button1 = GUICtrlCreateButton("&Öffnen", 176, 352, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("111", 8, 32, 75, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("222", 88, 32, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END GUI section ###

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Button1
    MsgBox(0, 'Öffnen', 'Button 1 was pressed')

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

    Case $msg = $Button2
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesIn111) Then
    For $i = 1 To $filesIn111[0]
    GUICtrlSetData($List1, $filesIn111[$i])
    Next
    EndIf

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

    Case $msg = $Button3
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesIn222) Then
    For $i = 1 To $filesIn222[0]
    GUICtrlSetData($List1, $filesIn222[$i])
    Next
    EndIf
    EndSelect
    WEnd

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück (Einträge @LF-getrennt)
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0)
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles,1), @LF)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles,1)
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1)
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & @LF
    Else
    $strFiles &= $file.Path & @LF
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & @LF
    _ShowSubFolders($Subfolder, $Ext, $Dir)
    Next
    EndFunc

    [/autoit]

    edit: man da is für 10 min n kollege da und schon is man 9 min zu langsam :D

  • Hallo

    kann mich Schnitzel nur anschliessen, zusätzlich $Button1 zum Leben erweckt:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    ; Variable
    $filesIn111 = _GetFilesFolder_Rekursiv('111', 'txt', 0, 0)
    $filesIn222 = _GetFilesFolder_Rekursiv('222', 'txt', 0, 0)

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

    #Region ### START GUI section ### Form=c:\users\rs\desktop\auit\start\form1.kxf
    $Form1_1 = GUICreate("Form1", 436, 388, 261, 124)
    $List1 = GUICtrlCreateList("", 8, 64, 417, 279, BitOR($LBS_SORT,$LBS_STANDARD,$WS_HSCROLL,$WS_VSCROLL,$WS_BORDER))
    $Button1 = GUICtrlCreateButton("&Öffnen", 176, 352, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("111", 8, 32, 75, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("222", 88, 32, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END GUI section ###

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Button1
    ; MsgBox(0, 'Öffnen', 'Button 1 was pressed')
    ShellExecute(GUICtrlRead($List1))
    Case $msg = $Button2
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesIn111) Then
    for $i = 1 to $filesIn111[0]
    GUICtrlSetData($List1, $filesIn111[$i])
    Next
    ; _ArrayDisplay($filesIn111, 'Rekursiv alle au3-Dateien')
    Else
    GUICtrlSetData($List1, $filesIn111 & @CRLF)
    EndIf

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

    Case $msg = $Button3
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesIn222) Then
    for $i = 1 to $filesIn222[0]
    GUICtrlSetData($List1, $filesIn222[$i])
    Next

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

    ; _ArrayDisplay($filesIn222, 'Rekursiv alle au3-Dateien')
    Else
    GUICtrlSetData($List1, $filesIn222 & @CRLF)
    EndIf
    EndSelect
    WEnd

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück (Einträge @LF-getrennt)
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0)
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles,1), @LF)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles,1)
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1)
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & @LF
    Else
    $strFiles &= $file.Path & @LF
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & @LF
    _ShowSubFolders($Subfolder, $Ext, $Dir)
    Next
    EndFunc

    [/autoit]

    mfg (Auto)Bert

  • Hallo zusammen,

    entschuldigt bitte meine reglose Anteilnahme, (hab ein längeres Wochenende - mal ohne Internet - genossen)
    Ich möchte hiermit an allen Beteiligten herzlich für Eure Hilfe danken ^^ .

    Grüße
    Tim.

    (Wenn ich sowas auch mal so schnell hinbekommen würde... ;( )

  • BugFix -> Danke für den Hinweis, aber ich denke die Rekursion passt, da in den Verzeichnissen weitere Verzeichnisse autauchen können (oder verstehe ich hier etwas falsch?)

    Ich habe das Script etwas erweitert (klar nicht wirklich code-konform ... bin ja noch ein bugcreator schlecht hin :wacko: )
    Ich habe mir einen Pseudo-Sprachswitch reingebastelt (Aufruf mit "_SetLanguage") klar könnte man die Sprachwertet als ini einlesen und dann verarbeiten, aber hier gings mir nur um die Machbarkeit :whistling:
    Des weitere habe ich eine_FilePrint Funktion mit eingebunden (Zeile 133), das Ganze würde auch prima klappen, jedoch druckt mit das Script das Selektierte File 2x hintereinander aus?
    Wie kommt das?

    Liegt das am auslesen der $List1? (aber wenn dem so ist, warum wird beim Öffnen [Zeile 85] der Datei diese nicht auch 2x geöffnet?)
    Vorab danke für einen entsprechenden Hinweis, was ich hier falsch gemacht habe

    Spoiler anzeigen
    [autoit]


    _FilePrint(GUICtrlRead($List1))

    [/autoit]
    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    ; Variablen
    $filesInDSC = _GetFilesFolder_Rekursiv('files\dsc', '*', 0, 0)
    $filesInCIDEON = _GetFilesFolder_Rekursiv('files\cideon', '*', 0, 0)
    $filesInCENIT = _GetFilesFolder_Rekursiv('files\cenit', '*', 0, 0)
    $filesInRIESS = _GetFilesFolder_Rekursiv('files\riess', '*', 0, 0)
    $filesInALLIANCE = _GetFilesFolder_Rekursiv('files\alliance', '*', 0, 0)

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

    Opt("TrayMenuMode", 1)

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

    #Region ### START Koda GUI section ### Form=start\form1.kxf
    $Form1_1 = GUICreate("Auswahl", 637, 441, 192, 123)
    GUISetIcon("gfx\favicon.ico")
    GUISetBkColor(0xFFFFFF)
    $List1 = GUICtrlCreateList("", 8, 96, 456, 303, BitOR($LBS_SORT,$LBS_USETABSTOPS,$WS_HSCROLL,$WS_VSCROLL))
    $Button1 = GUICtrlCreateButton("&Öffnen", 374, 408, 89, 25, BitOR($BS_DEFPUSHBUTTON,$WS_GROUP))
    $Group1 = GUICtrlCreateGroup("Zusätzliche Optionen", 471, 90, 161, 192)
    $Label1 = GUICtrlCreateLabel("Information", 487, 114, 56, 17, $SS_CENTERIMAGE)
    $Label2 = GUICtrlCreateLabel("Sprache", 487, 146, 55, 17, $SS_CENTERIMAGE)
    $Button7 = GUICtrlCreateButton("DE", 567, 146, 27, 25, $WS_GROUP)
    $Button8 = GUICtrlCreateButton("EN", 599, 146, 27, 25, $WS_GROUP)
    $Label4 = GUICtrlCreateLabel("Auswahl", 485, 254, 44, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Pic1 = GUICtrlCreatePic("", 0, 0, 636, 57, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Button4 = GUICtrlCreateButton("&Beenden", 550, 408, 80, 25, $WS_GROUP)
    $Button5 = GUICtrlCreateButton("&Information", 567, 113, 59, 25, BitOR($BS_ICON,$WS_GROUP))
    GUICtrlSetImage(-1, "gfx\favicon.ico", -1, 0)
    $Button2 = GUICtrlCreateButton("Drucken", 564, 249, 61, 25, $WS_GROUP)
    GUICtrlSetResizing(-1, $GUI_DOCKLEFT+$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    $Label3 = GUICtrlCreateLabel("Copyright 2010(C) R.E.Spence", 9, 415, 161, 17)
    GUICtrlSetFont(-1, 5, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xC0C0C0)

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

    $Pic2 = GUICtrlCreatePic("gfx\dsc.gif", 8, 56, 84, 36, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetCursor (-1, 0)
    $Pic3 = GUICtrlCreatePic("gfx\cideon.gif", 99, 61, 76, 28, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetCursor (-1, 0)
    $Pic4 = GUICtrlCreatePic("gfx\riess.gif", 179, 55, 107, 41, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetCursor (-1, 0)
    $Pic5 = GUICtrlCreatePic("gfx\cenit.gif", 293, 60, 55, 28, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetCursor (-1, 0)
    $Pic6 = GUICtrlCreatePic("gfx\plm_all.jpg", 360, 58, 103, 37, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetCursor (-1, 0)

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

    TraySetClick("1")

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

    $MenuItem1 = TrayCreateItem("Information")
    $MenuItem2 = TrayCreateItem("&Beenden")
    GUISetState(@SW_SHOW)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END GUI section ###

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

    TraySetState()

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

    While 1

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

    $tmsg = TrayGetMsg()
    $gmsg = GUIGetMsg()

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

    Select

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

    ; Buttons
    Case $gmsg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $gmsg = $Button1
    ShellExecute(GUICtrlRead($List1))
    Case $gmsg = $Pic2 ; DSC
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesInDSC) Then
    for $i = 1 to $filesInDSC[0]
    GUICtrlSetData($List1, $filesInDSC[$i])
    Next
    Else
    GUICtrlSetData($List1, $filesInDSC & @CRLF)
    EndIf
    Case $gmsg = $Pic3 ; CIDEON
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesInCIDEON) Then
    for $i = 1 to $filesInCIDEON[0]
    GUICtrlSetData($List1, $filesInCIDEON[$i])
    Next
    Else
    GUICtrlSetData($List1, $filesInCIDEON & @CRLF)
    EndIf
    Case $gmsg = $Pic4 ; RIESS
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesInRIESS) Then
    for $i = 1 to $filesInRIESS[0]
    GUICtrlSetData($List1, $filesInRIESS[$i])
    Next
    Else
    GUICtrlSetData($List1, $filesInRIESS & @CRLF)
    EndIf
    Case $gmsg = $Pic5 ; CENIT
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesInCENIT) Then
    for $i = 1 to $filesInCENIT[0]
    GUICtrlSetData($List1, $filesInCENIT[$i])
    Next
    Else
    GUICtrlSetData($List1, $filesInCENIT & @CRLF)
    EndIf
    Case $gmsg = $Pic6 ; ALLIANCE
    GUICtrlSetData($List1, '') ; Inhaltliches Löschen des Listboxes
    If IsArray($filesInALLIANCE) Then
    for $i = 1 to $filesInALLIANCE[0]
    GUICtrlSetData($List1, $filesInALLIANCE[$i])
    Next
    Else
    GUICtrlSetData($List1, $filesInALLIANCE & @CRLF)
    EndIf
    Case $gmsg = $Button2 ; Print
    $printFile = GUICtrlRead($List1)
    _FilePrint($printFile)
    Case $gmsg = $Button4 ; Exit
    ExitLoop
    Case $gmsg = $Button5 ; Information
    MsgBox(65, "Information", "Copyrigth 2010")
    Case $gmsg = $Button7 ; DE
    _SetLanguage(1)
    Case $gmsg = $Button8 ; EN
    _SetLanguage(0)

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

    ; Tray menu
    Case $tmsg = 0
    ContinueLoop
    Case $tmsg = $MenuItem1
    MsgBox(65, "Information", "Copyrigth 2010")
    Case $tmsg = $MenuItem2
    ExitLoop

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

    EndSelect
    WEnd

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

    ;==================================================================================================
    ; Function Name: _SetLanguage($language = 0)
    ; Description: Setzen der GUI Oberflächensprache
    ; Parameter(s):$language 0 = Englisch
    ; 1 = Deutsch
    ; Return Value(s): Array (Standard) od. String mit den länderspezifischen Daten
    ; Author(s): TmG
    ;==================================================================================================
    Func _SetLanguage($language = 0)
    Dim $controls[9] = ['', $Form1_1, $Label2, $Label1, $Group1, $Button1, $Button4, $Button2, $Label4]

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

    If $language = 0 Then ; EN
    Dim $setLanguage[9] = ['', 'Start', 'Language', 'Information', 'More options', '&Open', '&Exit', 'Print', 'Selected']
    ;GUICtrlSetData($Label2, "Language")
    For $i = 1 To UBound($setLanguage) - 1
    GUICtrlSetData($controls[$i], $setLanguage[$i])
    Next

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

    else ; DE
    Dim $setLanguage[9] = ['', 'Starter', 'Sprache', 'Information', 'Zusätzliche Optionen', '&Öffnen', '&Beenden', 'Drucken','Auswahl']
    ;GUICtrlSetData($Label2, "Sprache")
    For $i = 1 To UBound($setLanguage) - 1
    GUICtrlSetData($controls[$i], $setLanguage[$i])
    Next

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

    Endif
    Endfunc

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

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s):$sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück (Einträge @LF-getrennt)
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0)
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles,1), @LF)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles,1)
    EndIf
    EndFunc

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

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1)
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & @LF
    Else
    $strFiles &= $file.Path & @LF
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & @LF
    _ShowSubFolders($Subfolder, $Ext, $Dir)
    Next
    EndFunc

    [/autoit]

    Hinweis: dsc, riess, cideon, alliance, cenit sind als Verzeichnisse im Script-Verzeichnis. In diesen Verzeichnissen befinden sich entsprechende Dokus oder Pdfs....