WinActivate unter Windows 10 scheitert scheinbar

  • Hallo,



    seit ich Windows 10 nutze, klappt der WinActivate scheinbar nicht mehr. Das zu aktivierende Fenster erscheint ("PDF-Datei speichern unter" aus Excel) und wird durch den WinWait wohl auch gefunden, bleibt aber ohne Focus nach dem WinActivate. Klicke ich mit der Maus auf die Titelleiste, läuft das Script weiter.
    Was kann ich tun?

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****

    #AutoIt3Wrapper_outfile=!4-DruckMitAcrobatPDFStarten.exe

    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

    Opt("TrayIconDebug", 1)

    Opt("WinTitleMatchMode", 1)

    If $CmdLine[0] < 1 Then Exit

    Global $Dateiname = $CmdLine[1]

    HotKeySet("{ESC}", "Terminate")

    WinWait('PDF-Datei speichern unter')

    WinActivate('PDF-Datei speichern unter')

    **** hier bleibt das Script stehen, das Fenster ist sichtbar, aber ohne den Fokus **************

    WinWaitActive('PDF-Datei speichern unter')

    AutoItSetOption("SendKeyDelay", 1)

    Send($Dateiname & "{ENTER}")

    Sleep(1000)

    WinWaitClose('Adobe PDF wird erstellt',"",2)

  • Hi,

    genau zu diesem Thema hatte sich nach der Umstellung auf Win10 ein Kollege bei mir gemeldet, weil dessen von mir erstellte Scripte AB UND ZU falsche Ergebnisse liefern, wegen ebendiesem nicht funktionierenden WinActivate()/WinWaitActive().

    Bei Nachforschungen hat sich ergeben, dass das Script einige Tage problemlos läuft (Logfiles) um dann völlig sporadisch das zu steuernde Fenster nicht mehr zu aktivieren.

    Die Logfiles weisen keinen einzigen Fehler seitens des AutoIt-Scripts aus, d.h. AutoIt bekommt die Info, das Fenster der zu steuernden Anwendung ist im Vordergrund, was allerdings nicht stimmt.

    Das Problem liegt in der zu steuernden Anwendung (keine API vorhanden...), in dem ein einziges von ca. 15 auszufüllenden EDIT-Feldern nicht mit ControlSend() beizukommen ist, so dass ich (nur für dieses Feld) auf Send() angewiesen bin.

    Wenn natürlich das Fenster nicht aktiv ist, führt Send() ins leere, der Feldinhalt wird nicht geändert und infolge dessen bei der weiteren Scriptausführung werden falsche Ergebnisse produziert.

    Die werden dann zwar abgefangen, und idR. durch einen Neustart des Scripts (welches dann meist fehlerfrei durchläuft) bereinigt, aber das kann ja nicht die Lösung sein.

    Das Script läuft seit Jahren problemlos, vor einigen Wochen wurde der Rechner auf Win10 geupdatet, seitdem gibt es diese sporadischen Aussetzer.

    Auf dem Rechner läuft neben der obligatorischen Serververbindung ausschliesslich eine Excel-Instanz welche mit dem AutoIt-Script kommuniziert, welches wiederum die Anwendung steuert.

    Ich würde liebend gerne, da ich sowieso so gut wie alles andere per VBA programmiere, in diesem Fall auf AutoIt verzichten, aber erstens möchte ich die Ursache wissen, und zweitens ist mir die Zeit zu schade, mehrere hundert AutoIt-Zeilen in mehrere tausend VBA-Zeilen zu überführen.

    Ich habe mehrfach im Script die Kombination WinActivate()/WinWaitActive() verwendet, um Fehler zu provozieren, es werden Menüs und mehrere Unterfenster völlig problemlos erkannt, auch wenn die zu steuernden Fenster und Controls alle "unsichtbar" sind....