Win32-Programmierung mit VC++ und der Win-Api
3.2 - Systemweite “Hotkeys”
Hier das Tutorial, um Systemweite Hotkeys zu verwenden. Systemweit aus dem Grunde, weil unsere Anwendung im Hintergrund sein kann, also nicht aktiv, und man trotzdem mittels unserer Tastenkombinationen Aktionen ausführen kann, welche im Programm hinterlegt sind. Kurz zusammengefasst: Mittels einer Tastenkombination Funktionen ausführen, obwohl ich das Programm nicht im Vordergrund habe.
Dazu müssen ergänzen wir wie immer vom Win32-Konstrukt ausgehend unseren Quellcode um einige Zeilen:
#include ...
#define HOTKEY_WIN_W WM_USER
....
....
switch (message)
{
case WM_CREATE:
{
// ALT = 1; CRTL = 2; SHIFT= 4; WIN = 8
// CRTL+ALT = 3
// ALT+SHIFT = 5
// ------------------------------------------
// 8 is the modifier flag
// 87 is the keycode for 'W'
// the number accounding to ascii-table ...
if(!RegisterHotKey(hwnd, HOTKEY_WIN_W, 8, 87))
MessageBox(hwnd, "Fehler beim registrieren des Hotkeys!", "Error", MB_OK);
}
break;
Hier wurde nun zunächste ein Handle namens “HOTKEY_WIN_W” definiert. Dieser Hotkey wurde mittels “RegisterHotKey” Systemweit registriert. HOTKEY_WIN_W ist dabei nur ein Name. Ihr könnt euren Handle nennen wie Ihr wollt. Wichtig ist das WM_USER. Des weiteren müssen wir diesem Handle unsere Tastenkombination verpassen. Das geht mit den 2 anderen Zahlenparametern.
RegisterHotKey(hwnd, HOTKEY_WIN_W, 8, 87)
Das bedeutet, dass dem Handle HOTKEY_WIN_W die Taste “win” (8) in Verbindung mit dem ASCII-Wert 87 (W) erhält. Ganz einfach. Um nun zum Beispiel andere Tastenkombinationen zu registrieren, habe ich hier ein paar Beispiele:
RegisterHotKey(hwnd, HOTKEY_WIN_W, 8, 87) - WIN + W
RegisterHotKey(hwnd, HOTKEY_CRTL_X, 2, 88) - CRTL + X
RegisterHotKey(hwnd, HOTKEY_SHIFT_CRTL_X, 6, 88) - SHIFT + CRTL + X
RegisterHotKey(hwnd, HOTKEY_CRTL_ALT_G, 3, 71) - CRTL + ALT + G
Um also andere Kombinationen zu verwenden, müssen einfach nur die entsprechenden Zahlenwerte der Systemtasten addiert werden.
ALT = 1
CRTL = 2
SHIFT= 4
WIN = 8
CRTL + ALT = 3
ALT + SHIFT = 5
CRTL + SHIFT = 6
...
Mehr braucht es nicht, um Systemweite Hotkeys zu verwenden. Eine Beispielanwendung gibts unten zum download. Um die Hotkeys anzutesten, öffnet euer Programm, dannach zum Beispiel den Editor und drückt euren Hotkey. Jetzt könnt Ihr zurück zu unserer Anwendung und voila: die MessageBox ist da, obwohl wir den fokus nicht auf unser Programm hatten…
Wie immer gibts den Source als kompletten Visual C++ Workspace zum download: system_hotkeys.zip - 30.3 KB