Einen Hotkey registrieren


Durch die Arbeit mit Fenstern und Dialogen kennen Sie bereits die Shortcuts, die Sie dort definieren können. Wenn z.B. ein Buchstabe auf einem Button, in einer Checkbox usw. unterstrichen ist, dann erwartet der Anwender, dass die entsprechende Aktion durch Drücken der ALT-Taste in Verbindung mit diesem Buchstaben ausgelöst wird.
Es ist aber auch möglich, systemweite Hotkeys zu definieren, die relativ unabhängig von ihrem Programm sind. Das heißt, notwendig ist Ihr Programm schon (der Hotkey muss ja erzeugt werden), aber es muss nicht unbedingt aktiv sein. Es kann im Hintergrund bleiben und z.B. durch den Hotkey nach vorn geholt werden.

In diesem Beispiel wollen wir einen Hotkey definieren und benutzen. Grundlage dafür ist die API-Funktion RegisterHotKey. Neben dem Handle des Fensters als ersten Parameter, geben Sie als zweites eine möglichst eindeutige ID an, mit der der Hotkey später identifiziert werden kann. Der dritte Parameter kann eine oder mehrere der folgenden Werte enthalten, die mit xor verknüpft werden:

Wert Bedeutung
MOD_ALT die ALT-Taste muss gedrückt gehalten sein
MOD_CONTROL die STRG-Taste muss gedrückt gehalten sein
MOD_SHIFT die Shift-Taste muss gedrückt gehalten sein
MOD_WIN die Windows-Taste muss gedrückt gehalten sein


Zuletzt geben wir die eigentliche Taste an, die unserem Hotkey zugeordnet werden soll. Wollen wir z.B. den Hotkey STRG+ALT+H registrieren, dann würde der Befehl so aussehen:

if(RegisterHotKey(wnd,hk_Id,MOD_ALT xor MOD_CONTROL,WORD('H'))) then
  MessageBox(0,'Hotkey registriert!',@szClassname[1],MB_OK or MB_ICONINFORMATION);


Hinweis

Beachten Sie bitte, dass der Rückgabewert false ist, wenn der Hotkey nicht registriert werden konnte. Das kann passieren, wenn Ihr Programm versucht, einen bereits registrierten Hotkey erneut zu registrieren. Gestalten Sie Ihr Programm daher möglichst so, dass der Hotkey nur der Unterstützung oder Ergänzung dient und keine vitale Funktion hat, von der der Ablauf des Programms abhängt.