ControlSend o. ControlClick betätigt nicht "Finish" Button

  • Hallo liebe Community,

    ich brauche mal wieder Hilfe von ein paar Profis.

    Und zwar habe ich in einer Automatisierten Installationsroutine ein Fenster das sich nicht schließen lässt und dadurch das Script unterbrochen wird.

    Und zwar hängt es immer an einem Fenster wenn von dem ersten Installationsteil das "Setup"-Fenster per "Finish" Button beendet werden soll.

    Das Script lief auch zuvor und da wurde einfach per Winwaitactive und GlobalSend("!F") das Fenster geschlossen. Nun hat vermutlich der SW Lieferant irgendwas geändert und nun läuft mein Script nicht mehr durch.

    Nun wollte ich anstatt dem Send Befehl, ControlSend oder ControlClick verwenden um sicher zu sein dass auch das richtige Fenster bearbeitet wird.

    Das Windows Info Tool gibt mir folgendes aus:

    >>>> Window <<<<
    Title: Atlantic Zeiser Printers 6.0r8(x64) Setup
    Class: #32770
    Position: 708, 325
    Size: 503, 389
    Style: 0x94CA084C
    ExStyle: 0x00010100
    Handle: 0x00000000002F0DC2

    >>>> Control <<<<
    Class: Button
    Instance: 2
    ClassnameNN: Button2
    Name:
    Advanced (Class): [CLASS:Button; INSTANCE:2]
    ID: 1
    Text: &Finish
    Position: 324, 327
    Size: 75, 23
    ControlClick Coords: 34, 10
    Style: 0x50010000
    ExStyle: 0x00000004
    Handle: 0x000000000030080A

    >>>> Mouse <<<<
    Position: 361, 362
    Cursor ID: 0
    Color: 0x000000

    >>>> StatusBar <<<<

    >>>> ToolsBar <<<<

    >>>> Visible Text <<<<
    < &Back
    &Finish
    Cancel
    Completing the Atlantic Zeiser Printers 6.0r8(x64) Setup Wizard
    Atlantic Zeiser Printers 6.0r8(x64) has been installed on your computer.

    Click Finish to close this wizard.


    >>>> Hidden Text <<<<
    Nullsoft Install System v2.46
    Nullsoft Install System v2.46
    Installation Complete
    Setup was completed successfully.

    Der Teil in meinem Script sollte dann wie folgt ablaufen:


    Oben mit ControlClick. Hab auch schon die Koordinaten mit eingegeben. Und anstatt ControlClick hab ich Control Send verwendet und versucht entweder durch senden "!F" oder "{Enter}" den Button zu betätigen. Aber nichts funktioniert.

    Ach genau. anstatt von "[Class]" als Titel hab ich auch den Text verwendet mal mit und mal ohne den WinTitleMatchmode.

    Und ja ich hab schon jede Menge Forenthreads durchgelesen aber keine Lösung gefunden :S

    Gibt es noch eine andere Möglichkeit AutoIt zu zwingen auf ein bestimmtes Fenster zu reagieren? Und :rtfm: hat mich auch nicht weitergebracht ;)

    Ich hoffe ihr habt mir eine Lösung :Face:

    LG
    Bad

    Erstellt wurde das Script mal mit XP, dann unter WIN 7 32bit gepflegt und sollte nun auf WIN 7 64 bit laufen. Vielleicht liegt hier ja der Hund begraben...

    SciTe version ist 3.4.4(falls es was bringt)

  • Eigentlich schon:


    Und ich hab es auf zwei verschiedenen PCs versucht da ich mit meinen Laptop an die Gruppenrichtlinien von meiner Fa. gebunden bin.
    Aber auf meinem Test-PC hab ich volle Zugriffsrechte.

    • Offizieller Beitrag

    WinWaitActive("[CLASS:#32770]", "", 1500)
    Das bedeutet du wartest auf irgendein Fenster der allgemeinen Windows-Fensterklasse 32770. 8|
    Warum läßt du den Parameter "Text" ungenutzt? Der Fenstertitel ist doch bekannt. Also kombiniere Klasse und Titel: WinWaitActive("[CLASS:#32770]", "Atlantic Zeiser Printers 6.0r8(x64) Setup", 1500)

  • Die Fenster Klasse hab ich angegeben weil es mir das Windows Info Tool ausgespuckt hatte :whistling:

    Hm... mit Textsuche hatte ich das auch schon versucht. Da ist halt das Problem, dass die Versionsnummer nicht fest sein darf. Da ich aber weiß wie die Nummer lautet hatte ich die Textsuche mit "Atlantic Zeiser..."& $VersionNo &"Setup" eingetragen.
    Hat aber auch nicht zum Erfolg geführt.

    Es ist als ob Autoit das Fenster nicht findet...

    Wäre es möglich was über das Handle des Fensters zu machen? WinWaitActive etc. gibt ja als Erfolg das Handle zurück.

  • Eben nochmal probiert mit deinem Vorschlag.

    AutoIt
    Opt("WinTitleMatchMode", 2)
    Opt("WinTextMatchMode", 2)
    Global $SetupFinishActivate = WinActivate("Atlantic Zeiser Printers",  Completing the Atlantic Zeiser Printers")
    WinWaitActive("Atlantic Zeiser Printers", "Completing the Atlantic Zeiser Printers", 1500)
    ControlSend("Atlantic Zeiser Printers", "Completing the Atlantic Zeiser Printers", "[CLASS:Button; INSTANCE:2]", "left", 1)

    Geht auch nicht.

    Das seltsame ist das die vorherigen Fenster mit Pfadeingabe und Lizenzbestätigung alle ganz normal funktionieren.
    unseren Lieferanten hab ich auch schon gefragt was sie anderes machen und ob sie helfen können. Aber die kennen AutoIt nicht...

  • Habe inzwischen das Problem gelöst bekommen.

    Der Unterschied lag an der x64 Installation. Bei x64 installiert unser Software Lieferant das C++ Redistributable nicht mehr mit.
    Mein Skript hat aber auf das Fenster gewartet. Als es nicht kam blieb das Skript einfach an der Stelle stehen.

    Sorry wegen der späten Antwort... habs total vergessen 8|