Anfänger braucht Hilfe

  • Hallo zusammen,

    ich möchte per autoit von einem Programm mehrere Files exportieren und komme absolut nicht weiter bzw. habe keinen Plan, wie man das Problem am besten anpackt.

    Was ich habe, sind also ca. 50 Files in einem (Windows)-Ordner, welche in ein Programm (Omega) eingelesen werden sollen und von dort sollen sie wieder - nach Manipulation - als txt-File exportiert werden. Das Programm selbst kann jedoch immer nur ein einziges File bearbeiten, es lässt sich auch immer nur eines öffnen. Bei 50 oder mehr Dateien sitzt man also entsprechend lange daran, da man im Programm einige Parameter setzen muss, etc.
    Die Manipulation der Files mittels autoit klappt soweit, aber ich weiß nicht, wie man Dateien aus einem (Windows)-Ordner einlesen bzw. mit dem Programm öffnen kann. Muss man dazu zuerst den Ordnerinhalt in ein Textfile (Array?) exportieren und die Pfade von dort einlesen?
    Ein Problem ist auch, dass das WindowInfo-Tool im Programm Omega die Öffnen-Buttons, etc. nicht erkennt. Man bekommt nur Koordinaten angezeigt, muss also wohl die Maus steuern. Ausserdem MUSS ich über den Button gehen, da das direkte Öffnen durch Klick auf das File nicht möglich ist. Also müsste man den Pfad in das "Dateiname-Fenster" des Öffnen-Dialogs kopieren.

    Irgendwie müsste es dann also so ausschauen ?( :

    For $i=1 to Anzahl der Dateien im Ordner bzw. der Liste

    mouseclick(Omega, Öffnen)

    $filename$i = ControlGetText [Den Dateinamen müsste man sich als ersten Eintrag aus einer Liste holen, welche man vorher mit autoit anlegt. Nur wie?]

    ControlSetText("Öffnen", "", "[ID:1148]", $filename$i) [Ok, filename in den Öffnen-Dialog]

    Manipulation von file$i [kein Problem]

    Speichern file$i [kein Problem]

    Next

    Das ganze muss dann so lange laufen, bis alle Einträge der Liste abgearbeitet sind. Im Prinzip ist das nichts anderes als eine Batch-Konvertierung mit z.B. IrfanView.

    Kann mir jemand auf die Sprünge helfen?

    Danke und Gruß, Marco

    edit: Falls das jetzt zu konfus war, einfach nochmal nachfragen 8)

    Einmal editiert, zuletzt von current93 (30. Juli 2008 um 18:59)

  • [autoit]

    $path = "c:\dateiordner\"
    $filelist = _FileListToArray($path, "*", 1)
    ;[Run Omega] Pfadangabe! Mouseclicks müssen nicht immer stimmen
    For $i = 1 To $filelist[0]
    ;[Click Open]
    ControlSetText("Öffnen", "", "[ID:1148]", $path & $filelist[$i])
    ;hier manipulieren und speichern
    Next
    ;[Close Omega]

    [/autoit]
  • Danke vielmals! Ich werde mich gleich daran machen und bei Bedarf hier nochmal posten :thumbup:

  • Zitat

    ;[Run Omega] Pfadangabe! Mouseclicks müssen nicht immer stimmen

    Was genau meinst du mit Pfadangabe? Wie gesagt kann ich nicht auf die Buttons direkt zugreifen.

  • na du sollst omega nicht mit mouseclicks starten sonder mit dem Run befehl , mach rechtklick auf die omega exe und und nimm den pfad für den Run befehl. Sieht dann so ungefair aus Run ( "c:\programme\omega\omega.exe")

  • Achso, ok. Omega ist in diesem Fall schon offen. Den File-Öffnen Button in Omega muss ich dann aber trotzdem über die Maus steuern.
    Das Einlesen funktioniert nun soweit.

    Code
    $path = "c:\test\"
    $filelist = _FileListToArray($path, "*", 1)
    WinWaitActive("Öffnen")
    ControlSetText("Öffnen", "", "[ID:1148]", $path & $filelist[1])
    ControlClick("Öffnen", "", "Button2")
    Sleep(1000)

    Wie kann ich denn den Pfad c:\test\ über ein Explorer-Fenster auswählen und übergeben?

  • Super, Programm läuft und tut was es soll. Wenn es interessiert:

    [autoit]


    $path = FileSelectFolder("Choose a folder", "",1)
    $filelist = _FileListToArray($path, "*", 1)
    ;File öffnen um Mass-Range zu setzen
    MsgBox(0, "","To continue push the Open-Button of Omega8")
    WinWaitActive("Öffnen")
    ControlSetText("Öffnen", "", "[ID:1148]", $path & "\" & $filelist[1])
    ControlClick("Öffnen", "", "Button2")

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

    $lowerMass = InputBox("Mass Input", "Input lower mass for data export")
    $upperMass = InputBox("Mass Input", "Input upper mass for data export")

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

    ;Sleep(2000)

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

    MsgBox(0, "","From now on don´t move the mouse. Automatic data export will start!")
    For $i = 1 To $filelist[0]
    MouseClick("left",15, 80, 1,1)
    WinWaitActive("Öffnen")
    WinMove("Öffnen", "", 300, 500, 200, 200)
    ControlSetText("Öffnen", "", "[ID:1148]", $path & "\" & $filelist[$i])
    ControlClick("Öffnen", "", "Button2")
    Sleep(1000)
    MouseClick("left",10, 33, 1,1)
    MouseClick("left",29, 72, 1,1)
    MouseMove ( 255, 72,10)
    MouseClick("left",266, 124, 1,1)
    WinWaitActive("ASCII Mass Spectrum Range")
    ControlSetText ("ASCII Mass Spectrum Range", "", "[ID:2]", $lowerMass)
    Sleep(1000)
    ControlSetText ("ASCII Mass Spectrum Range", "", "[ID:3]", $upperMass)
    ;Sleep(1000)
    ControlClick("ASCII Mass Spectrum Range", "", 6)
    ControlClick("ASCII Mass Spectrum Range", "", 8)
    WinWaitActive("Speichern unter")
    ControlSetText("Speichern unter", "", "[ID:1148]", $path & "\" & $filelist[$i] & ".txt")
    ;Sleep(1000)
    ControlClick("Speichern unter", "", "Button2")
    Next
    MsgBox(0,"","Data export was successful!")

    [/autoit]

    Kann man bestimmt noch besser machen, aber das spart schon jede Menge Arbeit. Danke :)
    Werde autoit nun sicher öfter verwenden.

    • Offizieller Beitrag

    Da Du ja mit MouseMove und MouseClick arbeiten musst, solltest Du BlockInput(1) verwenden, damit der User dem Script nicht in die Quere kommt durch irgendwelche Mausbewegungen. Am Ende des Scripts dann das BlockInput(0) nicht vergessen.

    Edit: Achja und bei MouseMove als dritten Parameter Null angeben, damit der Mauszeiger nicht "umherwandert", sondern gleich über dem jeweiligen GUI-Element ist.

  • Oh... das wäre natürlich noch eine Option. Werde ich gleich noch reinschreiben...