Alle Dateien aus einem Ordner öffnen

  • Hallo ich bins mal wieder ;)
    Ich versuch mich gerade an einem Programm, das einen Film auf meiner Festplatte abspielen soll. Diese Filme bestehen meist aus mehreren Parts und werden bei Doppelclick mit vlc.exe geöffnet. Den exakten Filmnamen (der in der GUI über ein Input eingegeben werden soll) trägt nur der Ordner, indem sich die Parts des Films befinden. Z.b. sagen wir ich will Film1 öffnen: dann gibt es einen Ordner "Film1", der die Dateien "acd1.avi" und "acd2.avi" enthält. Nun sollen also alle Dateien aus dem Ordner "Film1" geöffnet werden! aba ich kriegs mal wieder (mangels Kenntnis) nicht hin.. hab auch schon die Sufu und Hilfe benutzt aber nichts gefunden. Ich dachte das funktioniert ungefähr so:

    Spoiler anzeigen
    [autoit]

    $film = (aus input)
    ShellExecute("*.*", "", "D:\Filme\" & $film)

    [/autoit]

    Für mich klingt das relativ logisch aber es funktioniert nicht!!
    Bitte wenns geht, helft mir!!

    MfG der sondaschuela69

    Einmal editiert, zuletzt von sondaschuela69 (25. November 2009 um 01:05)

  • Hiya,

    musst Du nicht den vlc über shellexcute aufrufen und den Namen des Films als Parameter angeben?
    Also so:

    ShellExecute("vlc.exe", "D:\Filme\" & $film)

    oder liege ich da falsch?

  • hmm das klingt plausibel;) ich werde es bei gelegenheit dann morgen testen ich meld mich dann ob es geklappt hat!!

    Edit: Okay ich konnte es nicht erwarten es heute noch auszuprobieren und: ES KLAPPT fast ;)

    solange der Film nur einen einwortigen Namen hat funktioniert es bestens(Bsp: "Departed"), hat er jedoch mehrere Wörter (Bsp: "Public Enemies") gehts nicht mehr weil dann iwie nach "Public", und nach "Enemies" gesucht wird!! Hier so sieht mein Script aus:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=C:\Users\Olli\Desktop\AutoIT\koda_1.7.1.0\Forms\VLCMovieStarter.kxf
    $Form1 = GUICreate("VLCMovieStarter", 320, 75, 192, 124)
    $Input1 = GUICtrlCreateInput("", 8, 32, 217, 21)
    $Label1 = GUICtrlCreateLabel("Filmname eingeben:", 8, 8, 98, 17)
    $Button1 = GUICtrlCreateButton("Play!", 232, 32, 57, 17, $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

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

    Case $Button1
    _Func1 ()
    EndSwitch
    WEnd

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

    func _Func1 ()
    $film = ControlGetText("VLCMovieStarter", "", $Input1)
    ShellExecute("vlc.exe", "D:\Filme\" & $film, "C:\Program Files\VideoLAN\VLC")
    Sleep (1500)
    endfunc

    [/autoit]

    und die Fehlermeldung vom VLC:

    Zitat

    Einmal editiert, zuletzt von sondaschuela69 (23. November 2009 um 23:29)

  • [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #Region ### START Koda GUI section ### Form=C:\Users\Olli\Desktop\AutoIT\koda_1.7.1.0\Forms\VLCMovieStarter.kxf
    $GUI = GUICreate("VLCMovieStarter", 320, 75, 192, 124)
    $giPath = GUICtrlCreateInput("", 8, 32, 177, 25)
    $glEntP = GUICtrlCreateLabel("Pfad eingeben:", 8, 8, 98, 21)
    $gbPlay = GUICtrlCreateButton("Play!", 232, 32, 57, 25, $WS_GROUP)
    $gbSfP = GUICtrlCreateButton("...", 192, 32, 37, 25, $WS_GROUP)
    GUICtrlSetFont(-1,18)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $gbPlay
    _Play()

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

    Case $gbSfP
    $FsF = FileSelectFolder("Bitte wähle den Pfad aus.","",4,"D:\Filme\")
    If @error then
    GUICtrlSetData($giPath,@DesktopDir)
    Else
    GUICtrlSetData($giPath,$FsF)
    EndIf
    EndSwitch
    WEnd

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

    func _Play()
    Local $Files
    $Files = _FileListToArray(GUICtrlRead($giPath),"*.avi",1)
    For $i = 1 to $Files[0]
    RunWait(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN\VLC","InstallDir")&'\vlc.exe "'&GUICtrlRead($giPath)&"\"&$Files[$i]&'"')
    Next
    Endfunc

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

    Machs doch einfach so ^^
    Er sucht jetzt nur nach .avi Files, aber das lässt sich ja auch alles noch weiter anpassen.
    PS: wenn der erste part fertig ist, VLC einfach schließen - der nächste startet dann im anschluss

  • Hallo,

    ich hab nach wie vor immer so meine Probleme etwas in Code umzusetzen, aber ich weiss dass Datei- und Ordnernamen mit Leerzeichen häufig Probleme bereiten.
    Soweit mir bekannt ist, lassen sich solche Probleme aber durch Einschließen des kompletten Namens in Anführungsstrichen (also "C:\Dokumente und Einstellungen\...") erreichen. Versuchs doch mal, vielleicht lüpts.
    Gruß
    gnArfL

  • Ne das von Seubo funktioniert denk ich mal schon, aber ich wollte mein Script egtl in dem Muster lassen =( und das mit den anführungszeichen hab ich auch schon probiert..
    würde das vielleicht auch mit ner if-funktion gehen? Meinetwegen z.B.

    if $film enthält ein SPACE then
    dem Programm iwie sagen, das das Space mit zum Filenamen gehört ?? ich mein wenn man den Pfad insgesamt einfügen würde würde es ja sicher auch mit den leerzeichen funktionieren?? Habs auch schon probiert als Filmnamen name1("{SPACE}")name2 einzugeben das haut leider auch nich hin ... Schade dabei müsste es theoretisch alles hinhaun^^

  • Wo ist denn das Problem an dem Vorschlag? Ich habe dein Skript nur so angepasst, dass du den Ordner auswählen kannst, ohne den Namen eintippen zu müssen (Meine Filme sind zwar lustigerweise auch auf D:/Filme aber das ist ja nicht bei jedem so. Naja dass der VLC direkt nen ganzen Ordner öffnen kann wusst ich nicht, deswegen hab ich die parts der Reihe nach öffnen lassen. Außerdem habe ich eingefügt, dass der VLC nicht aus C:/Program Files geäffnet wird. Meiner ist nämlich auf D: installiert - also klappts nicht. Deswegen liest er das installationsverzeichniss des VLC aus der Registry aus. Das Problem mit den leerzeichen hab ich doch auch geregelt. Aber hier nochmal ein versuch der dir hoffentlich zusagen wird...

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #Region ### START Koda GUI section ### Form=C:\Users\Olli\Desktop\AutoIT\koda_1.7.1.0\Forms\VLCMovieStarter.kxf
    $GUI = GUICreate("VLCMovieStarter", 320, 75, 192, 124)
    $giPath = GUICtrlCreateInput("", 8, 32, 177, 25)
    $glEntP = GUICtrlCreateLabel("Pfad eingeben:", 8, 8, 98, 21)
    $gbPlay = GUICtrlCreateButton("Play!", 232, 32, 57, 25, $WS_GROUP)
    $gbSfP = GUICtrlCreateButton("...", 192, 32, 37, 25, $WS_GROUP)
    GUICtrlSetFont(-1,18)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $gbPlay
    _Play()

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

    Case $gbSfP
    $FsF = FileSelectFolder("Bitte wähle den Pfad aus.","",4,"D:\Filme\")
    If @error then
    GUICtrlSetData($giPath,@DesktopDir)
    Else
    GUICtrlSetData($giPath,$FsF)
    EndIf
    EndSwitch
    WEnd

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

    func _Play()
    If StringLeft(StringTrimLeft(GUICtrlRead($giPath),1),2) <> ":\" Then ;Wenn keine andere Festplatte gewählt, dann..
    Local $File = """D:\Filme\"&GUICtrlRead($giPath)&"" ;Benutze Standartpfad "D:\Filme\"
    ElseIf GUICtrlRead($giPath) = "" Then ;Wenn leer,
    Local $File = """D:\Filme\""" ;Spiele "D:\Filme\" ab
    Else ;ansonsten
    Local $File = ""&GUICtrlRead($giPath)&"" ;benutze den kompletten pfad.
    EndIf
    Run(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN\VLC","InstallDir")&'\vlc.exe '&$File)
    ;~ ShellExecute("vlc.exe",$File,RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN\VLC","InstallDir"));ShellExecute geht auch, aber ich mag run lieber :P
    Endfunc

    [/autoit]

    PS:


    Soweit mir bekannt ist, lassen sich solche Probleme aber durch Einschließen des kompletten Namens in Anführungsstrichen erreichen.


    Das war eigentlich genau das was ich gemacht habe. Der Rest war nur Spielerei um das Skript für die Allgemeinheit besser nutzbar zu machen.

  • Vielen Dank für eure bemühungen echt jetzt, aber es klappt auch damit nicht!! immer wieder erscheint bei VLC der gleiche Fehler!! Boah es ist zum Haare ausreißen...^^ Naja dann muss ich mir wohl ab heute nur Filme mit einwortigem Namen anschaun^^

    Vielleicht liegts ja auch an VLC???

  • Nein, es war mein Fehler, tut mir leid - habe es scheinbar nicht ausreichend getestet - denn beim Umschreiben hat sich ein Fehler eingeschlichen. Versuch mal Zeile 42 durch das hier zu ersetzen

    [autoit]

    Local $File = '"'&GUICtrlRead($giPath)&'"' ;benutze den kompletten pfad.

    [/autoit]
  • OK das hat erstmal FAST geklappt XDD Jetz sieht VLC zwar das die Namen zusammengehören, sagt jetzt aber er konnte "name1 name2" nicht lesen 8| Vielleicht doch ein VLC-Fehler???

    Was so ein kleines Tool doch für Arbeit macht^^

  • Okay ich glaubs dir XDDD Hab dein Script jetz komplett genomm und tadaa^^ vielen Dank echt ;) Auch für die viele Mühe^^

    So ich finde das egtl ein nützliches Tool^^ weil mich nervt das immer wenn ich bei VLC Ordner öffnen will und dann alles Suchen muss XD Aber das ist ja jetzt vorbei^^

    Okay dann ma gute Nacht ;)

    MfG sondaschuela

  • Schade, jetzt hab ich's ganz umsonst hochgeladen :(
    http://www.youtube.com/watch?v=4eK8dziNSPM

    Naja schön dass es nun auch bei dir klappt - Gute Nacht ;)

    PS: Benutz doch noch zusätzlich $BS_DEFPUSHBUTTON als Style bei dem Play! Button, damit kannst du nach der Eingabe im Edit-Feld einfach mit Enter bestätigen
    also so:

    [autoit]

    $gbPlay = GUICtrlCreateButton("Play!", 232, 32, 57, 25, $WS_GROUP + $BS_DEFPUSHBUTTON )

    [/autoit]