Horké klávesy (MFC a C++)

Potřebovali jste ve svých programech reagovat na stisk kláves, i když program není aktivní? Pokud ano, tak jste mohli využít horkých kláves (dále HK). A právě o nich bude tento článek.

HK umožňují programu používat klávesnici, i když není v popředí. To se hodí zejména u systémových programů a nebo se to dá využít k zakázání některých standardních klávesových zkratek (CTRL+ALT+DEL). A nyní jak na to.

Vytvoříme si aplikaci založenou na dialogu a umístíme na ni dvě tlačítka. První bude HK registrovat, druhé ji odregistruje. Začněme tedy registrací. To se provádí funkcí RegisterHotKey.

BOOL RegisterHotKey(
  HWND hWnd,
  int id;
  UINT fsModifiers,
  UINT vk
);

Význam jednotlivých parametrů:

hWnd
handle okna, kterému se budou zasílat zprávy o stisku HK
id
Identifikátor horké klávesy. Může být od 1 do 2 na 32.
fsModifiers
Klávesové modifikátory (Alt, Ctrl, Shift). Může být MOD_ALT, MOD_CONTROL nebo MOD_SHIFT
vk
Virtuální kód klávesy. Musíte si ho zjistit v dokumentaci

Uvedu zde příklad zaregistrování klávesové kombinace ALT+F4:

RegisterHotKey(m_hWnd,1,MOD_ALT,VK_F4);

Když už máme funkci zaregistrovanou, nesmíme zapomenout zase ji odregistrovat. To se provede pomocí funkce UnregisterHotKey .

BOOL UnregisterHotKey(
  HWND hWnd,  //handle okna, který chceme odregistrovat
  int id //identifikátor horké klávesy
);

Příklad u této funkce uvádět nebudu, protože si myslím, že ji každý pochopí.

Teď už nám pouze zbývá naprogramovat reakci na stisk HK. To provedeme ve funkci WindowProc. V parametru wParam je identifikátor HK která byla stisknuta.

...

//funkce WindowProc
switch(message)
{
  case WM_HOTKEY:
  {
    if(wParam==1)
      MessageBox("Stisknuta horká klávesa!");
    break;
  }
}

Stáhnout zdrojový kód (24kb)

UPOZORNĚNÍ: Jedná se o archiv článků z let 2003 - 2005, uvedené technologie či postupy již mohou být neaktuální.