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);
}