Auswahl nach Datum und Datei Typ, im Windows Datei Auswahl Dialog

  • Ich versuche in einen Programm was Konvertierungen machen soll, automatisch die zuletzt erstellte Datei eines bestimmten Typs zu laden, ich komme problemlos bis zu dem lade Dialog, ist das Standard Ding von Windows, was auch bei Datei öffnen und sowas kommt (siehe Anhang). Gerade habe ich es über eine Abfrage gelöst, sprich ich muss wissen welche Nummer die "erste Datei" hat die ich laden möchte, ist aber leider super unsauber.

    Das habe ich bis jetzt:

    [autoit]


    Local $s=1

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

    WinActivate("Open") ; Programm öffnen
    WinActive("Open")

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

    $ava = InputBox("Wahl", "Datei") ; Nummer der ersten Datei eingeben

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

    MouseClick("left", 18, 36,1,0) ;Evtl. Controlklick ; Die Schritte bis zum öffnen Dialog

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

    While($s<7)
    Send("{UP}")
    $s+=1
    WEnd
    Send("{RIGHT}")
    Send("{UP}")
    Send("{ENTER}") ; Öffnet Dialog
    Sleep(500)
    Send("test (" & $ava & ").txt")
    Sleep(500)
    Send("{ENTER}")
    $ava+=1

    [/autoit]


    Edit:

    Werde es jetzt doch so machen, hier nochmal der jetzt aufgeräumte Code, funktioniert anstandslos, falls doch wer eine Idee hat wie man das besser umsetzten kann immer raus damit.

    [autoit]


    HotKeySet("{MEDIA_PLAY_PAUSE}", "av")
    HotKeySet("{ESC}","_exit")

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

    $ava = InputBox("Wahl", "Datei")

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

    While 1
    Sleep (100)
    WEnd

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

    Func av ()

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

    WinActivate("Open")
    WinWait("Open")

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

    MouseClick("left", 18, 36,1,0)
    Send("{UP 6}" & "{RIGHT}" & "{UP}" & "{ENTER}")
    WinWait("Öffnen")
    Send("test (" & $ava & ").txt")

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

    Send("{ENTER}")
    $ava+=1

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

    EndFunc

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

    Func _exit ()
    Exit
    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von Rivet (28. März 2013 um 00:40)

  • Und warum willste das so umständlich über den fileopendialog von libreoffice machen? Ich habe zwar nur ms office, aber so ziemlich jedes Programm unterstützt den Aufruf mit Parametern um Dateien zu öffnen. Das hier sollte also genauso und vorallem zuverlässiger funktionieren:


    Spoiler anzeigen
    [autoit]


    #include <file.au3>

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

    global $libreoffice = "c:\programme....\libreoffice\word.exe" ; frei erfunden, den pfad musst selbst wissen
    global $ordner = @ScriptDir & "\" ; verzeichnis mit deinen Dateien

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

    HotKeySet("{MEDIA_PLAY_PAUSE}", "openLastFile")
    HotKeySet("{ESC}","_exit")

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

    While 1
    Sleep (100)
    WEnd

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

    Func openLastFile()
    Local $file = getLastFile($ordner)
    If $file = -1 Then
    msgbox(0,"Fehler","Keine Dateien im Verzeichnis " & $ordner & " gefunden!")
    Else
    ConsoleWrite('"' & $libreoffice & '" "' & $file & '"' & @CRLF) ; debug
    ;Run('"' & $libreoffice & '" "' & $file & '"') ; musste noch einkommentieren, wenn der Pfad zu libreoffice passt...
    EndIf
    EndFunc

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

    func getLastFile($folder)
    local $aTemp = _filelisttoarray($folder,"*.txt",1) ; hier Dateiendung anpassen, falls es doch keine txt Dateien sind
    Local $newestCreationTime = 0
    Local $lastFile

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

    If $aTemp = 0 Then return -1

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

    for $i = 1 to $aTemp[0]
    $curCreationTime = FileGetTime($aTemp[$i],1,1) ; Erstelldatum in Stringform, siehe Hilfe wenn stattdessen das Änderungsdatum genutzt werden soll
    ConsoleWrite($curCreationTime & @CRLF); debug
    If $curCreationTime > $newestCreationTime Then
    ConsoleWrite("neuere Datei gefunden: " & $curCreationTime & " --> " & $newestCreationTime & " (" & $aTemp[$i] & ")" & @CRLF); debug
    $newestCreationTime = $curCreationTime
    $lastFile = $aTemp[$i]
    EndIf
    next

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

    return $folder & $lastFile

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

    endfunc

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

    Func _exit()
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Erstmal ein fetter DANKE für den Code,
    Ich programmiere erst wieder seit Gestern, ich bin erst garnicht drauf gekommen das das auch über Parameter gehen könnte, wobei ich mir noch nicht sicher bin ob es funktioniert. Es handelt sich leider nicht um eine Office Anwendung, sondern um Avantes - AvaSoft, das ich nur auf der Arbeit habe, habe noch nie ein so Benutzer unfreundliches Programm gesehen, es gibt keine Tastenkürzel, nicht einmal sowas wie Strg+O.
    Ich habe jetzt bis Dienstag Zeit deinen Code mal umzuschreiben und mich damit ein wenig zu beschäftigen, meine Lösung funktioniert zwar, aber so richtig glücklich macht sie mich wirklich nicht.

    Nochmal vielen Dank und frohe Ostern.