Mausklick auf GUI

  • Hallo Freunde der automatisierten Schritte,

    in der Hilfe fand ich folgendes Beispiel


    Was muss ich hinzufügen, wenn ich

    (a) fortlaufend bei Mausbewegung
    (b) beim linken Mausklick
    (c) beim Doppelklick
    (d) beim rechten Mausklick

    die Mausposition auf der GUI im obigen Script angezeigen möchte?

    Ich dachte an sowas wie:

    While True
    Sleep(10)
    ... Mausaktion auswerten, dann Funktion GetPos() aufrufen ...
    WEnd

    Nur wie wertet man Mausklicks und Mausbewegung im obigen Hauptfenster?

    Gibt es dafür bereits hier im Forum ein Beispiel?


    Viele Grüße und vielen Dank :)
    AutoMit

  • Verstehst du wie GUIs in Autoit verwaltet werden? Hast du dir Beispiele zu einfachen GUIs angeschaut? Wenn ja solltest du bereits wissen, dass GUIs im MSGloop-Modus immer eine Hauptschleife haben in der guigetmsg() ausgewertet wird um z.B. Klicks auf Buttons zu erkennen. Genau in dieser Hauptschleife musst du auch die Mausposition ermitteln, sofern du diese permanent erhalten möchtest.

    Dein Ziel ist also bereits erreicht, wenn du den getpos() Funktionsaufruf oben im Beispiel in der do...until Schleife einbaust anstatt per Hotkey.

    Dabei wirst du dann aber feststellen, dass hier noch Optimierungspotential besteht, weil deine Anzeige Labels so viel zu schnell und oft aktualisiert werden würden und dadurch ein unangenehmes Flackern des Label controls auftritt. Um das zu vermeiden solltest du die Funktion getpos() nur in sinnvollen intervallen aufrufen (z.b. alle 100ms). Ergänzend könntest du in der Funktion auch noch prüfen ob sich im Vergleich zum vorherigen Ergebnis etwas an der Mausposition geändert hat und nur dann das Anzeige Label aktualisieren lassen.

    Für eine zeitliche Drosselung schau dir diese Funktionen in der Hilfe an:

    AutoIt
    timerinit()
    timerdiff()
    ; Alternativ könnte man auch diese Funktion nutzen
    adlibregister()

    Um Mausklicks zu erkennen lies bitte die Hilfe zu folgenden Funktionen:

    AutoIt
    guigetmsg()
    _IsPressed()

    Der Unterschied: guigetmsg() liefert nur dann Ergebnisse wenn innerhalb der GUI geklickt wird, _ispressed() liefert auch Ergebnisse wenn du in anderen Fenstern rumklickst.