Funktion "WinMove" funktioniert nicht im kompilierten Skript

  • Hallo liebe AutoIt-Gemeinde,

    bei nachfolgendem Skript funktioniert nach dem Kompilieren die Funktion "WinMove(....)" nicht:

    Start SpeedCommander
    AutoIt
    #NoTrayIcon#Region ;**** Directives created by AutoIt3Wrapper_GUI ****#AutoIt3Wrapper_Icon=..\..\..\Icons\ACDSee9pro.ico#AutoIt3Wrapper_Res_Description=Open SpeedCommander#AutoIt3Wrapper_Res_Fileversion=1.0.0.35#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y#AutoIt3Wrapper_Res_Language=1031#AutoIt3Wrapper_AU3Check_Stop_OnWarning=y#AutoIt3Wrapper_Run_Tidy=y#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****Opt('WinTitleMatchMode', 2)_SpeedCommander_Start()ExitFunc _SpeedCommander_Start()    Local $_shellexec = ShellExecute('SpeedCommander.exe', ' /L:C:\x_Alter_PC\Eigene Dateien /R:C:\x_Alter_PC', 'C:\Program Files\SpeedProject\SpeedCommander 15', 'open')    Local $_winwait = WinWait('SpeedCommander 15 Pro', '', 10)    If $_shellexec <> 0 Then        If @DesktopWidth > 1366 Then            WinMove($_winwait, '', (@DesktopWidth / 2) - (1400 / 2), ((@DesktopHeight / 2) - (900 / 2) + 70), 1400, 900)        EndIf    Else        MsgBox(64, '"SpeedCommander"', 'Sie haben nicht genug Rechte, um das Programm "SpeedCommander 15 Pro" zu starten' & @CRLF & @CRLF & _                'oder' & @CRLF & @CRLF & _                'das Programm "SpeedCommander 15 Pro" scheint' & @CRLF & _                'auf diesem PC nicht installiert zu sein.')    EndIf    ReturnEndFunc   ;==>_SpeedCommander_Start

    Hat jemand einen Rat für mich, zumal das Skript im Editor enwandfrei funktioniert?

    Außerdem hätte ich gern noch gewußt, wie man den Code korrekt in einen Spoiler einfügt, sodass es so wie im Editor aussieht?

    LG., AutoItler

    Ps.: Die .au3 habe ich wegen der besseren Übersicht angehängt.

    Start_SpeedCommander.au3

    Lege dich nie schlafen ohne zu wissen,
    dass du an diesem Tag etwas Gutes getan hast.

  • Sleep mal eine knappe Sekunde bevor du WinMove verwendest, eventuell versuchst du zu schnell das Fenster zu verschieben.

    Du wartest nämlich nur solange bis das Fenster erstellt wurde, aber nicht sichtbar bzw. aktiv ist.

    Generell ist ein fleißiges Einfügen vor Sleeps() in solchen Scripten sehr zu empfehlen, gerade bei Benutzung von Win10.

    Wer meint, ein Fenster bzw. ein Control sei "online" , nur weil man es auf "dem Bildschirm" sieht, der liegt FALSCH!

    Wenn die Message-queues von Windows geflutet werden, dann ist jede Anwendung/Fenster/Control froh, wenn überhaupt Nachrichten zeitnah verarbeitet werden.

    Ich hatte nach Umstellung auf Win10 bei mehreren Automatisierungsscripten sowohl bei Netzwerkanwendungen als auch auf lokalen Maschinen sporadische "Hänger". Das macht dann bei etlichen hundert Zeilen Script (die bis dato einwandfrei liefen) keinen Spass....

    Bei einigen Tests kam dann heraus, dass trotz erfolgreichem Winactive()/WinWaitActive() teilweise bis zu 1200ms (über eine Sekunde!!!) vergingen, bis ControlSend()/ControlClick()/ControlSetText() bzw. überhaupt alle "Steuerungen" funktionierten....

    Einfügen von großzügig bemessenen Sleeps hat geholfen

    Die Scripte laufen jetzt zwar eine Viertelstunde länger, aber dafür funktioniert wieder alles....

    -->> NEVER RUN A CHANGING SYSTEM ! <<--

  • Außerdem hätte ich gern noch gewußt, wie man den Code korrekt in einen Spoiler einfügt, sodass es so wie im Editor aussieht?

    Direkt links neben dem Spoiler-Tag findest du den Code-Tag in der Werkzeugleiste. Das wird dir aber auch angezeigt, wenn du mit der Maus über den Symbolen in der Werkzeugleiste stehst.

  • Hallo Bitnugger, danke für die Erklärung. Das nächste Mal werde ich besser aufpassen. LG., Autoitler

    Lege dich nie schlafen ohne zu wissen,
    dass du an diesem Tag etwas Gutes getan hast.

  • Vielen Dank auch für die Idee mit Sleep() zu arbeiten. Ich habe es mit Sleep() mit Werten bis 5000 versucht. Leider ohne Erfolg.

    Noch weitere Vorschläge?

    LG., AutoItler

    Lege dich nie schlafen ohne zu wissen,
    dass du an diesem Tag etwas Gutes getan hast.

  • Teste mal das hier...