Func so lange ausführen wie GUI Button gedrückt wird... (Funk Taster)

  • Hi.

    Ich suche nach einer Möglickeit eine Funktion exact so lange ausgeführt wird, wie auf einem GUI Button in dem Scropt gedrückt wird. Ähnlich wie eine TX FunkTaste...

    Hintergrund: Ich scripte gerade ein Tool mit dem Kameraden der Freiwilligen Feuerwehr in Corona Zeiten über Internet Funken üben sollen.

    Ich habe dazu in Autoit eine GUI mit einem Button erstellt (GUICtrlCreateButton) als Sende Taste.

    Hier kann ich ja aber immer nur die GUIGetMsg() auslesen wenn einmal geklickt wurde, oder?

    Wie kriege ich das hin, das eine Funktion so lange ausgeführt wird wie der Button mittels Linker Maustaste festgehalten wird?

    Die Funkton sendet dabei einfach einen Hotkey mittesl Send in ein anderes Fenster und soll halt wieder aufhören wenn der Button los gelassen wird...

    Jemand eine Idee? Kann mir eigentlich nicht vorstellen das es schwierig ist, bin aber in dern Foren und Anleitungen irgendwie nicht fündig geworden, oder ich suche falsch... :/

    Viele Grüße

    Stefan

  • Ich bin mir nicht sicher, ob Buttons standardmäßig eine Funktion/ein Event dafür anbieten aber mit $GUI_EVENT_PRIMARYDOWN und $GUI_EVENT_PRIMARYUP kannst du herausfinden ob die Maustaste gedrückt wird.

    Du könntest es einfach so kombinieren, dass du GUIGetMsg mit dem advanced Parameter = 1 nutzt, dann kriegst du auch gleichzeitig die Koordinaten, von wo der Klick ausgelöst wurde.

    Jetzt musst du nur noch im Event die Koordinaten mit denen des Buttons vergleichen, liegen sie dadrin, soll gesendet werden.

    Wird die Maustaste wieder angehoben, dann soll abgebrochen werden.

  • Der Wert von GUIGetMsg wird standardmäßig erst gesetzt, wenn die Maus losgelassen wird.

    Aber mit folgendem Ansatz könnte es vielleicht gehen. Dabei wird aber kein Button, sondern eine Taste (hier 'k') verwendet.

    Alpines Lösung ist eindeutig eleganter :)

  • wenn man bei alpines seinem beispiel hinter zeile 32 folgendes einfügt bleibt der button gedrückt, oder?
    MsgBox(0,"Button wird gehalten","Button wird gehalten bis er erneut gedrückt wird. ",1)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • :thumbup:
    Beitrag somit "erledigt" ?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hier noch eine andere Lösung:

    Einmal editiert, zuletzt von Bitnugger (9. Dezember 2020 um 19:33) aus folgendem Grund: Nicht benötigte Variable $bSend entfernt.

  • Und hier eine etwas kürzere Version von Bitnugger's Lösung, per GUIGetCursorInfo() statt Koordinaten.

    Edit: "$bSend" entfernt, dessen Sinn sich mir nicht erschlossen hat.

    Edit 2: Nach Hinweis von Bitnugger Switch GUIGetMsg($GUI_EVENT_ARRAY)[0] durch Switch GUIGetMsg() ersetzt. Hinweis auf "advanced" Parameter ist dann auch nicht mehr nötig.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

    5 Mal editiert, zuletzt von Professor Bernd (9. Dezember 2020 um 14:39)

  • Wenn du eh nur das Event auswertest, reicht Switch GUIGetMsg().

    Sowas blödes. :Face: Danke für den Hinweis! Werde ich im Posting oben gleich korrigieren.

    Hier solltest du besser auch prüfen, ob kein Fehler aufgetreten ist, da $aCI in dem Fall kein Array ist.

    If Not @error And Not $bSend And $aCI[4] = $g_idButton Then

    Auch da hast du recht. :)

    Ich habe "$bSend" aus deinem Code entfernt. Hatte das einen tieferen Sinn?

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Ich habe "$bSend" aus deinem Code entfernt. Hatte das einen tieferen Sinn?

    Ja, hatte es. Beim Testen hatte ich eine Version, die nur mit GUIGetCursorInfo arbeitete, also ohne $GUI_EVENT_PRIMARYDOWN und $GUI_EVENT_PRIMARYUP. Ohne $bSend wird GUICtrlSetData dann bei jedem Durchlauf ausgeführt, solange die primäre Maustaste gedrückt bleibt. Mit $GUI_EVENT_PRIMARYDOWN (wird nur 1x gesendet, solange die Maustaste gedrückt bleibt) ist $bSend aber nicht mehr nötig.