Konvertertool - Ordner übergreifend sauber Dateien suchen und auflisten

  • Ich teste es gerade die ganze Zeit so, dass genau 2 Dateien gefunden werden.
    Ich habe deines eingebaut und der erste Durchlauf ist super. Nur bei der zweiten will es nicht. Das Programm ist offen mit dem neuen Fenster, aber wieder nicht im Vordergrund...

    Spoiler anzeigen
    [autoit]


    While $x <= $y

    $datei = $aFiles[$x]
    If @error Then
    MsgBox(48, "", "Fehler", 2)
    ExitLoop
    EndIf

    $dateiarray = _PathSplit($datei, $szDrive, $szDir, $szFName, $szExt) ; Pfad zerlegen
    $Datei_name = $dateiarray[3] & $dateiarray[4]


    $Datei_oE = $datei
    $Datei_oE = StringTrimRight($datei, 3)

    Sleep (2000)
    ShellExecute ($datei)

    While WinActive("Technobox CAD6") = 0
    WinActivate("Technobox CAD6")
    WEnd

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

    Sleep (1000)
    Send ("{F12}") ;F12 Befehl für Speichern unter
    sleep (2000)

    While WinActive("Zeichnung speichern unter") = 0
    WinActivate("Zeichnung speichern unter")
    WEnd
    Send("{ALTDOWN}") ;Alt + S Befehl für Speichern
    Sleep (500)
    Send("s")
    Sleep (500)
    Send("{ALTUP}")
    Sleep (2000)

    While WinActive("DWG Export") = 0
    WinActivate("DWG Export")
    WEnd
    Send("{ENTER}") ;Enter Befehl für Ok
    Sleep (2000)

    Send("{CTRLDOWN}")
    Sleep (500)
    Send("{F4}") ;Strg + F4 Befehl für aktuelle Fenster vom Programm schliessen
    Sleep (500)
    Send("{CTRLUP}")
    sleep (2000)

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


    $x += 1

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

    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Xethria (23. Oktober 2008 um 15:31)

  • ich kann nur raten, aber funktionierts vllt so?

    Spoiler anzeigen
    [autoit]

    While $x <= $y

    $datei = $aFiles[$x]
    If @error Then
    MsgBox(48, "", "Fehler", 2)
    ExitLoop
    EndIf

    $dateiarray = _PathSplit($datei, $szDrive, $szDir, $szFName, $szExt) ; Pfad zerlegen
    $Datei_name = $dateiarray[3] & $dateiarray[4]


    $Datei_oE = $datei
    $Datei_oE = StringTrimRight($datei, 3)

    Sleep (2000)
    ShellExecute ($datei)

    While WinActive("Technobox CAD6", $aFiles[$x]) = 0
    WinActivate("Technobox CAD6", $aFiles[$x])
    WEnd

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

    Sleep (1000)
    Send ("{F12}") ;F12 Befehl für Speichern unter
    sleep (2000)

    While WinActive("Zeichnung speichern unter") = 0
    WinActivate("Zeichnung speichern unter")
    WEnd
    Send("{ALTDOWN}") ;Alt + S Befehl für Speichern
    Sleep (500)
    Send("s")
    Sleep (500)
    Send("{ALTUP}")
    Sleep (2000)

    While WinActive("DWG Export") = 0
    WinActivate("DWG Export")
    WEnd
    Send("{ENTER}") ;Enter Befehl für Ok
    Sleep (2000)

    Send("{CTRLDOWN}")
    Sleep (500)
    Send("{F4}") ;Strg + F4 Befehl für aktuelle Fenster vom Programm schliessen
    Sleep (500)
    Send("{CTRLUP}")
    sleep (2000)

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


    $x += 1

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

    WEnd

    [/autoit]

    Und bitte in Zukunft den Spoiler benutzen (Button links neben dem AutoIt Tag)

    EDIT: Wenn ich das richtig verstanden habe, bei jedem durchlauf öffnet sich also nochmal das Fenster? Also quasi wenn du 10 durchläufe hast hast du auch 10 offene Fenster? Mach einfach vor die Zeile $x += 1 ein WinClose() von dem Fenster das geschlossen werden soll ;)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • ich habe jetzt das geändert, dass nicht nur das zeichnungsfenster geschlossen wird, sondern das ganze programm.
    jetzt funktioniert es.
    aber ich werd es jetzt erstmal ausgiebig mit großen dateien testen, und mit mehr als nur 2... ich ahne etwas.

    Spoiler anzeigen
    [autoit]

    Send("{ALTDOWN}")
    Sleep (500)
    Send("{F4}") ;strg + F4 Befehl für aktuelle Fenster vom Programm schliessen
    Sleep (500)
    Send("{ALTUP}")

    [/autoit]
    Spoiler anzeigen
    [autoit]

    Send("{ALTDOWN}")

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

    Sleep (500)
    Send("{F4}") , alt + F4 Befehl um das ganze programm zu schliessen
    Sleep (500)
    Send("{ALTUP}")

    [/autoit]

    EDIT:

    Zitat

    EDIT: Wenn ich das richtig verstanden habe, bei jedem durchlauf öffnet sich also nochmal das Fenster? Also quasi wenn du 10 durchläufe hast hast du auch 10 offene Fenster? Mach einfach vor die Zeile $x += 1 ein WinClose() von dem Fenster das geschlossen werden soll ;)

    nein nein, das fenster wird beim ersten mal ordnungsgemäß geschloßen, dass nur das "programm" übrig ist. dann wird die zweite datei erst geöffnet, daran hatte ich gedacht.

    EDIT2:
    ich habe richtig geahnt. das script wartet nicht... die erste datei ist noch am speichern (kann bei großen zeichnungen echt verdammt lange dauern), da rennt es wohl weiter.

    Einmal editiert, zuletzt von Xethria (23. Oktober 2008 um 15:46)

  • dann würd ich eventuell mit fileexist prüfen ob die zu speichernde datei existiert ;)

    Wenn sie da ist wird die speicherung wohl fertig sein oder? Oder ist beim Speichern irgendein Fenster aktiv?

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Zitat

    dann würd ich eventuell mit fileexist prüfen ob die zu speichernde datei existiert

    An sowas habe ich auch gedacht, aber ich ahne, dass das nicht geht, weil sobald er anfängt zu speichern existiert sie ja schon. Und zack das Programm rennt weiter.

    Das Speichern ist abgeschlossen, wenn das Programm geschlossen wird... das heisst, ich mach den Schalter, dass es weiterrennt erstdann, wenns nicht (mehr) aktiv ist? Geht diese Denkweise?

  • Zitat

    while WinActive(deinfenster) = 1 ;1 = win is active
    ;er macht einfach nix
    WEnd

    zwischen while und wend muss ich nix hinschreiben?

    explizit WinWaitNotActive gibt es ja auch noch

  • Egal, was ich mache, wenn der erste noch speichert, rennt er im Hintergrund weiter.
    Ich habe jetzt verzweifelt nach Ereignissen gesucht, die erst nach dem Speichern auftreten und mir ist eins aufgefallen. Unten links des Programms in der Leiste dort (weiß nicht ob man sie Statusleiste nennt) ändert sich dort der Eintrag. Ich habe versucht mit Window Info draufzuklicken, aber der Eintrag dort scheint nicht greifbar zu sein. Habt ihr eine Idee.


    Ach und an dieser Stelle möchte ich noch vielllleeeenn Dank sagen, weil ich so schon sehr weit gekommen bin, vielen Dank für eure Hilfe! :love:

  • und es wird auch nix angezeigt was während des speicherns passiert und danach nicht mehr da ist?

    Dann würde mir als letzte Methode nurnoch einfallen in einer Schleife zu prüfen ob sich die Dateigröße noch ändert, ich gehe jetzt mal von dem Ansatz aus:
    Man klickt auf Speichern, es rappelt und tut und die datei wird im sekunden takt immer größer und größer...
    Das kann man abfragen vllt irgendwie so:?

    Spoiler anzeigen
    [autoit]

    ;Hier kommt noch alles vornedran also das klicken im fenster und so
    $begin = TimerInit()
    Local $old_size
    while 1
    $size = FileGetSize($file)
    if $size > $old_size Then
    $begin = TimerInit()
    else
    if TimerDiff($begin) > 5000 Then ExitLoop ;hier die Zeit in Milisekunden einstellen wie lange die Datei die selbe größe haben darf
    EndIf
    $old_size = $size
    WEnd
    ;AB hier kommt die nächste datei!
    ;als test:
    MsgBox(0, "Test", "Der Speichervorgang wurde beendet!")

    [/autoit]

    Ich hoffe das geht so... ansonsten bitte jemand korrigieren :)

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Alles klappt, es läuft wartet und läuft dann weiter. Danke danke danke danke danke danke danke! Für mich ist dann, dass Thema fertig.