FileSelectFolder mit Dateianzeige

  • hallo zusammen,
    möchte den FileSelectFolder im prinzip so wie der FileOpenDialog.
    der FileOpenDialog wäre zwar okay, wenn ich dort nur einen ordner auswählen könnte.
    der FileSelectFolder bietet leider nicht eine struktur, wo auch die in den ordnern enthaltenen dateien sehe.

    [Blockierte Grafik: http://www.novalku.com/autoit-forum/FileSelectFolder.jpg]

    [Blockierte Grafik: http://www.novalku.com/autoit-forum/FileOpenDialog.jpg]

    wer hat eine lösung ? danke.

    Einmal editiert, zuletzt von supernova (6. August 2013 um 08:08)

  • Lösungsmöglichkeit 1 (habe ich auch mal nach gesucht):

    Spoiler anzeigen
    [autoit]

    Global Const $DIR_Flag_Desktop = 0 ; Desktop
    Global Const $DIR_Flag_Programme = 2 ; Programme
    Global Const $DIR_Flag_Systemsteuerung = 3 ; Systemsteuerung
    Global Const $DIR_Flag_Drucker = 4 ; Drucker
    Global Const $DIR_Flag_EigeneDateien = 5 ; Eigene Dateien
    Global Const $DIR_Flag_Favoriten = 6 ; Favoriten
    Global Const $DIR_Flag_Autostart = 7 ; Autostart
    Global Const $DIR_Flag_Recent = 8 ; Recent (Inhalt des Dokumente-Menüs)
    Global Const $DIR_Flag_SendenAn = 9 ; Senden an
    Global Const $DIR_Flag_Papierkorb = 10 ; Papierkorb
    Global Const $DIR_Flag_Startmenue = 11 ; Startmenü
    Global Const $DIR_Flag_DesktopOrdner = 16 ; Desktop-Ordner
    Global Const $DIR_Flag_Arbeitsplatz = 17 ; Arbeitsplatz
    Global Const $DIR_Flag_Netzwerkumgebung = 18 ; Netzwerkumgebung
    Global Const $DIR_Flag_OrdnerNetzwerkumgebung = 19 ; Ordner Netzwerkumgebung
    Global Const $DIR_Flag_Schriftarten = 20 ; Schriftarten
    Global Const $DIR_Flag_Vorlagen = 21 ; Vorlagen
    Global Const $DIR_Flag_StartmenueAlle = 22 ; Startmenü für Alle Benutzer
    Global Const $DIR_Flag_ProgrammeAlle = 23 ; Programme für Alle Benutzer
    Global Const $DIR_Flag_Programme2 = 24 ; Startmenü für Alle Benutzer
    Global Const $DIR_Flag_Desktop2 = 25 ; Desktop für Alle Benutzer
    Global Const $DIR_Flag_Anwendungsdaten = 26 ; Anwendungsdaten
    Global Const $DIR_Flag_PrintHood = 27 ; PrintHood
    Global Const $DIR_Flag_FavoritenAlle = 31 ; Favoriten für Alle Benutzer
    Global Const $DIR_Flag_TemporaereInternetdateien = 32 ; Temporäre Internetdateien
    Global Const $DIR_Flag_Cookies = 33 ; Cookies
    Global Const $DIR_Flag_Verlauf = 34 ; Verlauf

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

    Global Const $BIF_BROWSEFORCOMPUTER = 0x1000 ; Only return computers
    Global Const $BIF_BROWSEFORPRINTER = 0x2000 ; Only allow the selection of printers
    Global Const $BIF_BROWSEINCLUDEFILES = 0x4000 ; The browse dialog box will display files as well as folders
    Global Const $BIF_DONTGOBELOWDOMAIN = 0x2 ; Do not include network folders below the domain level
    Global Const $BIF_EDITBOX = 0x10 ; Include an edit control in the browse dialog box
    Global Const $BIF_USENEWUI = 0x40 ; Use New Style (> Windows 2000)
    Global Const $BIF_RETURNONLYFSDIRS = 0x1 ; Only return file system directories
    Global Const $BIF_ALLOLDSTYLEFLAGS = BitOR ($BIF_BROWSEFORCOMPUTER, $BIF_BROWSEFORPRINTER, $BIF_BROWSEINCLUDEFILES, $BIF_DONTGOBELOWDOMAIN, $BIF_EDITBOX, $BIF_RETURNONLYFSDIRS, $BIF_USENEWUI)

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

    $dir = _FileSelectFolder("Test",$DIR_Flag_Arbeitsplatz,$BIF_BROWSEINCLUDEFILES + $BIF_USENEWUI + $BIF_EDITBOX)
    msgbox(0,"",$dir)

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

    Func _FileSelectFolder ($title, $root = 0, $flags = 0, $hwnd = 0)
    Local $ret, $pidl, $res = ''
    ; Creating Structures
    Local $ubi = DllStructCreate ("hwnd;ptr;ptr;ptr;int;ptr;ptr;int") ; structure BROWSEINFO
    Local $utl = DllStructCreate ("char[512]") ; Browse title
    Local $urs = DllStructCreate ("char[260]") ; Buffer for path (MAX_PATH size)
    ;Local $ulf = BitOR (BitShift(BitAnd ($flags,1),-9), _ ; 1: NOT show Create Folder Button
    ; BitShift(BitAnd ($flags,2),-5), _ ; 2: Use New Dialog Style
    ; BitShift(BitAnd ($flags,4),-2)) ; 4: Show Edit Control
    Local $ulf = BitAnd ($flags, $BIF_ALLOLDSTYLEFLAGS) ; Supported flags
    ; Filling structures
    DllStructSetData ($utl, 1, $title)
    DllStructSetData ($ubi, 1, $hwnd)
    DllStructSetData ($ubi, 3, DllStructGetPtr($urs))
    DllStructSetData ($ubi, 4, DllStructGetPtr($utl))
    DllStructSetData ($ubi, 5, $ulf)
    $ret = DllCall ("shell32.dll", "ptr", "SHGetSpecialFolderLocation", _
    "int", 0 , _
    "int", $root , _
    "ptr", DllStructGetPtr($ubi, 2))
    If $ret[0] Then Return $res
    ; Start browse window
    $pidl = DllCall ("shell32.dll", "ptr", "SHBrowseForFolder", "ptr", DllStructGetPtr ($ubi))
    If $pidl[0] Then
    $ret = DllCall ("shell32.dll", "int", "SHGetPathFromIDList", _
    "ptr", $pidl[0], _
    "ptr", DllStructGetPtr ($urs))
    If $ret[0] Then $res = DllStructGetData ($urs, 1)
    DllCall ("ole32.dll", "int", "CoTaskMemFree", "ptr", $pidl[0]) ; clear memory
    EndIf
    DllCall ("ole32.dll", "int", "CoTaskMemFree", "ptr", DllStructGetData ($ubi, 2))
    Return $res
    EndFunc

    [/autoit]

    Lösungsmöglichkeit 2 (muss ich morgen nachreichen...): --> finde ich leider nicht mehr wieder !

    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"

    Einmal editiert, zuletzt von Micha_he (4. Juli 2013 um 10:59)

  • vielen dank lieber Micha_he.
    genau. einen etappensieg haben wir schon.
    diese lösung zeigt die dateien vertikal an innerhalb vom ordner baum.
    hat es in dem ordner viele weitere ordner ist es etwas gewöhnungsbedürftig,
    zu scrollen und unten nachzusehen.

    [Blockierte Grafik: http://www.novalku.com/autoit-forum/FileSelectFolder_vertikal.jpg]

    gesucht ist also die lösung, wo die dateien vom ordner horizontal (in einem separaten bereich)
    angezeigt werden.

  • Habe den Code von Micha_he ausprobiert, denn ich suche auch das gleiche.

    Dabei stelle ich fest, das PopUp öffnet sich immer mit dem Arbeitsplatz.

    Was/Wo muss ich ändern damit das PopUp sich gleich einschiesst auf z.B.

    c:\lala\123

    Danke.

  • hallo gango, musst beim 2.parameter einen anderen wert setzen.

    1) also an stelle von Global Const $DIR_Flag_Arbeitsplatz = 17 ;Arbeitsplatz den gewünschten pfad.


    2) wenn ich an stelle vom arbeitsplatz den wert auf z.B. c:\lala\123 setze
    springt er nicht dorthin, zeigt aberdann alle ordner geöffnet an (da scrollstste dich müde).

  • Habe ich im ersten Beitrag schon ergänzt !

    Ich war fest der Meinung ich hatte auf der Arbeit eine weitere Lösung. Ist aber leider nicht der Fall oder ich finde sie nicht mehr wieder.

    Tut mir leid ?(

    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"