Top / Programming / C++Builder / ホットキーを使う

ホットキーを使う

RegisterHotKey APIでホットキーをシステムに登録すると、アプリケーションがアクティブでないときにも、イベントを受け取ることができます。

同じような機能に「フック」があります。ホットキーはフックの機能限定版と言えます。フックよりも簡単で安全に使用できます。

ホットキーを登録する

システムにホットキーを登録するには、RegisterHotKey 関数を使用します。

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  //ホットキーの登録
  HWND hWnd = Handle; //WM_HOTKEYメッセージを受け取るウインドウのハンドル
  int id = 0x00; //ホットキーの識別子
  UNIT modifiers = MOD_CONTROL; //キー修飾子フラグ
  UNIT vk = VK_SPACE; //仮想キーコード
  if (RegisterHotKey(hWnd, id, modifiers, vk) == 0) {
    //登録に失敗したとき
  }
}

引数のidは、ホットキーの識別子です。
複数のホットキーを登録する場合は、ホットキーごとにidを変えます。
DLLで使用する場合は、GlobalAddAtom 関数を使ってホットキーの識別子を取得します。

引数modifiersは、次の値の任意の組み合わせを指定します。

引数vkは、ホットキーの仮想キーコードを指定します。

ホットキーメッセージを受け取る

メッセージを受け取る関数を定義します。

class TForm1 : public TForm
{
private:
  //WM_HOTKEYメッセージを受け取ったときに実行する関数
  void WMHotKey(TMessage& Message);
  //WM_HOTKEYメッセージを受け取るとWMHotKeyを呼び出す
  BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_HOTKEY, TMessage, WMHotKey);
  END_MESSAGE_MAP(TComponent)
};

WMHotKeyの引数Messageにメッセージを生成したホットキーのidが入っています。
idに応じて処理を行います。

void TForm1::WMHotKey(TMessage& Message)
{
  //ホットキーの識別子
  if (Message.WParam == 0x0000)
  {
    MessageBox(Handle, "ホットキーが押されました", "", MB_OK);
  }
}

登録したホットキーを破棄する

システムに登録したホットキーを破棄するには、UnregisterHotKey 関数を使用します。

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  HWND hWnd = Handle; //WM_HOTKEYメッセージを受け取るウインドウのハンドル
  int id = 0x00; //ホットキーの識別子
  UnregisterHotKey(hWnd, id);
}

更新履歴