Funktionreferenz


HotKeySet

Beschreibung anzeigen in

Setzt einen HotKey, um eine selbsterstellte Funktion aufzurufen.

HotKeySet ( "key" [, "function"] )

Parameter

key Die Tastenkombination für den HotKey im gleichen Format wie Send(). Siehe Bemerkungen.
function [optional] Der Name der aufzurufenden Funktion. Wird der Parameter nicht angegeben, wird der vorher gesetzte HotKey gelöscht.

Rückgabewert

Erfolg: 1.
Fehler: 0.

Bemerkungen

Es wird empfohlen Kleinbuchstaben (z.B. "b" und nicht "B") für Hotkeys zu verwenden. Um Fehler bei einigen Tastaturlayouts zu vermeiden, bei denen Klein- & Großbuchstabe auf unterschiedlichen Tasten liegen.

Tastaturen mit 102 Tasten wie die ungarische Tastatur benötigen "{OEM_102}" um die "í" Taste abzubilden.

Wenn zwei Skripte den gleichen HotKey (Tastenkombination) setzen, sollte man vermeiden, beide Skripte parallel auszuführen. Das zweite Skript kann den HotKey nicht abfangen, solange das erste Skript nicht beendet wurde oder den Hotkey freigegeben hat, bevor das zweite Skript diesen setzt. Verwenden die Skripts GUIs, so sollten GUISetAccelerators angedacht werden, da die Tasten nur aktiv sind wenn das zugehörige GUI aktiv ist.

Ein HotKey unterbricht "typischerweise" das aktive Autoit Skript und führt die angegebene Funktion bis zu deren Schluss aus, es sei denn, deren Ausführung wird ebenfalls unterbrochen.
Folgende Ausnahmen existieren:
1) Wenn die aktuelle Funktion eine "blockierende" Funktion ist (Tastenbetätigungen werden unterdrückt), dann werden die Tastendrücke gepuffert und sofort nach der blockierenden Funktion ausgeführt. MsgBox() und FileSelectFolder() sind Beispiele für blockierende Funktionen. Teste das Verhalten anhand des SHIFT+ALT+D Beispiels.
2) Wenn das Autoit Skript durch einen Klick auf das TrayIcon (Pause) pausiert wurde, werden alle HotKeys ignoriert.

Folgende HotKeys können nicht genutzt werden:

ASC nnnn Kann nicht wie in Send() verwendet werden. Es wird "A" als erstes Zeichen wie in Send() verwendet, wenn das "{...}" ungültig ist.
Strg+Alt+Entf Reserviert von Windows selbst
F12 Ebenfalls durch Windows reserviert (API)
Ziffernblock Enter Taste Man sollte stattdessen {Enter} verwenden, da hierbei beide Enter-Tasten abgefangen werden.
Win+B,D,E,F,L,M,R,U; und Win+Shift+M Reserviert durch Windows
Anmerkung: Win+B und Win+L könnten nur bei Windows XP und höher reserviert sein.
Alt, Strg, Shift, Win Dies sind Modifizierungstasten
Weitere Jede globale Tastenkombination, die mit einer anderen Software definiert wurde, und jede Kombination aus Basistasten, wie '{F1}{F2}', sowie jede Form von '{LALT}' oder '{ALTDOWN}'.

Wenn ein Hotkey gesetzt ist, wird dieser Tastendruck abgefangen. Autoit wird ihn nicht an die aktive Anwendung weitergeben. Ausnahmen sind: (NumLock, CapsLock, und ScrollLock). Diese ändern ihren Status.

Um eine Tastenkombination mit Send() zu senden, welche ein HotKeySet() Ereignis auslösen würde, ist ControlSend() zu verwenden oder das HotKeySet() Ereignis vorher freizugeben, da ansonsten durch das Send() Ereignis eine Endlosschleife entstehen könnte.

; Abfangen und Weitergeben von Tastendrücken
HotKeySet("{Esc}","captureEsc")
Func captureEsc()
    ; ... mach irgendwas
    HotKeySet("{Esc}")
    Send("{Esc}")
    HotKeySet("{Esc}","captureEsc")
EndFunc


Der aufzurufenden Funktion können keine Parameter übergeben werden. Diese werden ignoriert.

Das @HotKeyPressed Makro kann innerhalb von Funktionen genutzt werden, um z.B. mehrere Tasten gleichzeitig zu verwalten.

Verwandte Funktionen

GUISetAccelerators, Send

Beispiel

Beispiel 1

#include <MsgBoxConstants.au3>

; Drücke Esc um das Skript zu beenden, Pause um es zu pausieren

Global $g_bPaused = False

HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage") ; Shift-Alt-d

;;;; Hier ist der Hauptteil des Programms ;;;;
While 1
    Sleep(100)
WEnd
;;;;;;;;

Func TogglePause()
    $g_bPaused = Not $g_bPaused
    While $g_bPaused
        Sleep(100)
        ToolTip('Script ist pausiert', 0, 0)
    WEnd
    ToolTip("")
EndFunc   ;==>TogglePause

Func Terminate()
    Exit
EndFunc   ;==>Terminate

Func ShowMessage()
    MsgBox($MB_SYSTEMMODAL, "", "Das ist eine Nachricht.")
EndFunc   ;==>ShowMessage

Example 2, @HotKeyPressed usage

#include <MsgBoxConstants.au3>

; Um das Skript zu beenden ist Esc zu drücken, Pause/Break zum "Pausieren"

Global $g_bPaused = False

HotKeySet("{PAUSE}", "HotKeyPressed")
HotKeySet("{ESC}", "HotKeyPressed")
HotKeySet("+!d", "HotKeyPressed") ; Shift-Alt-d

While 1
    Sleep(100)
WEnd

Func HotKeyPressed()
    Switch @HotKeyPressed ; Der zuletzt gedrückte HotKey.
        Case "{PAUSE}" ; Die Zeichenfolge ist der {PAUSE} HotKey.
            $g_bPaused = Not $g_bPaused
            While $g_bPaused
                Sleep(100)
                ToolTip('Skript wurde "Pausiert"', 0, 0)
            WEnd
            ToolTip("")

        Case "{ESC}" ; Die Zeichenfolge ist der {ESC} HotKey.
            Exit

        Case "+!d" ; Die Zeichenfolge ist der Shift-Alt-d HotKey.
            MsgBox($MB_SYSTEMMODAL, "", "Dies ist eine Nachricht.")

    EndSwitch
EndFunc   ;==>HotKeyPressed