Funktionen ??

  • Hallo zusammen, ich werde wahnsinnig ;o)

    ich versuche mit AutoIT ein Programm zu installieren. Die erste Installation funktioniert ohne Probleme, doch nach einem Deinstallieren, funktioniert das anschließende Installieren nicht 100%, da das letze Fenster ein anderes ist. OK, nun hab ich eine Funktion gebastelt, aber es funzt nicht.

    Er springt zwar wie gewollt in die Funktion 2, aber beendet einfach das Skript ohne mir das Fenster mit "ENTER" zu beenden. Vielleicht seht ihr ja mein Fehler. Bin für jeden Tip dankbar.

    Grüße
    CrazyER


  • Das Problem wird wahrscheinlich sein dass das Exit in in deiner Funktion immer ausgeführt wird und nicht erst wenn das Fenster erscheint.

    Warum:

    Normalerweise sieht eine If-Then-Bedingung in AutoIt-Synthax so aus:

    [autoit]

    If [Bedingung] Then
    ;der auszuführende Code
    Endif
    ;ab hier wieder außerhalb der Bedingung

    [/autoit]

    Um Zeilen zu sparen gibt es aber noch die Möglichkeit das Statement direkt hinter das Then zu schreiben.
    Damit kann man dann auf das EndIf verzichten.
    Es wird dann allerdings aber nur der Teil hinter dem Then bedingt ausgeführt.
    Anderer Code außerhalb dieser Zeile wird ganz normal betrachtet:

    [autoit]

    If [Bedingung] Then ;auszuführender Code
    ;ab hier wieder außerhalb der Bedingung

    [/autoit]

    Desweiteren war ich der Meinung das bloß eine Adlib-Funktion zu einem Zeitpunkt möglich ist und nicht mehrere.
    Wenn ich mich da nicht täusche müsstest du also das ganze zu einer Funktion zusammenführen.

    Zusammengefasst sollte folgendes nun wohl eher dem entsprechen was du wolltest:

    [autoit]

    AdlibEnable ("Fenster",500)

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

    While 1
    Sleep(100)
    Wend

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

    Func Fenster()
    If WinExists("Primavera 5.0 Service Pack 2 - InstallShield Wizard","Yes, I want to resta") Then
    WinActivate("Primavera 5.0 Service Pack 2 - InstallShield Wizard","Yes, I want to resta")
    Send("{DOWN}{ENTER}")
    Exit
    EndIf

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

    If WinExists("Primavera 5.0 Service Pack 2 - InstallShield Wizard","InstallShield Wizard Complete") Then
    WinActivate("Primavera 5.0 Service Pack 2 - InstallShield Wizard","InstallShield Wizard Complete")
    Send("{ENTER}")
    Exit
    EndIf
    EndFunc

    [/autoit]

    Edit: Ganz wichtig - fiel mir erst gar nicht auf.
    Das Skript ist ja schon am Ende angelangt wenn du dein AdlibEnable aufrufst.
    Du musst deswegen das Skript noch weiter laufen lassen - z.b. mit einer Endlosschleife.
    Hab es oben mal entsprechend editiert.

    Einmal editiert, zuletzt von AspirinJunkie (13. Februar 2007 um 10:17)

    • Offizieller Beitrag

    Ich würde ganz auf den Aufruf mit Adlib verzichten.
    Bsp.:

    [autoit]


    While 1
    If WinExists("Primavera 5.0 Service Pack 2 - InstallShield Wizard","Yes, I want to resta") Then
    WinActivate("Primavera 5.0 Service Pack 2 - InstallShield Wizard","Yes, I want to resta")
    Send("{DOWN}{ENTER}")
    ExitLoop
    ElseIf WinExists("Primavera 5.0 Service Pack 2 - InstallShield Wizard","InstallShield Wizard Complete") Then
    WinActivate("Primavera 5.0 Service Pack 2 - InstallShield Wizard","InstallShield Wizard Complete")
    Send("{ENTER}")
    ExitLoop
    EndIf
    Sleep(500)
    WEnd
    Exit

    [/autoit]


    Aber prüf mal mit dem "AutoIt Window Info" - Tool, ob du nicht direkt mit ControlClick() auf die Controls zugreifen kannst, z.B. per classname.

  • SUPER !!! der 1. Test lief ohne Probleme durch.
    habe es nun mit der While Schleife gemacht. Mit dem ControlClick muss ich mich erst reinlesen. Aber laut dem Windows info dingedöhns, kann ich Buttons verwenden.

    Also ich muss da noch einiges nachlesen, aber das Tool wird immer interessanter.

    Nochmals DANKE !!

    PS: Habt irh noch nen paar gute Tips (Bücher, Sites) wo ich mich über sämtliche Funktionen einlesen kann ??

    Grüße
    CrazyER (der am Rande des Wahnsinns stand) ;o)

    • Offizieller Beitrag

    Dann wird die Bedingung (Fenstertitel + Text) nicht übereinstimmen mit dem Zustand im Programm.
    Zum Prüfen häng mal

    [autoit]

    MsgBox(0,"Text", WinGetText("Primavera 5.0 Service Pack 2 - InstallShield Wizard"))

    [/autoit]

    an und schau nach welcher Text dir zurückgegeben wird.

    Edit:

    Zitat

    Habt irh noch nen paar gute Tips (Bücher, Sites) wo ich mich über sämtliche Funktionen einlesen kann ??


    JA, zum einen die Hilfe selbst, zum andren das Tutorial (oben links im Boardmenü).