C++メモ(Win32API):ホットキー(キー入力の監視)

※先日C++(Win32API)を使った時に覚えた内容をメモしています。
 まだ勉強中なので、間違いがあればご指摘ください。

【ホットキーとは】
自分のアプリケーションのウィンドウがアクティブ状態でなくても監視されているキー。
ウィンドウのないアプリケーションの場合、「タイマーを使って0.1秒毎にGetKeyState()でキーを監視する」とかより断然効率的です。(ホットキー使うまでタイマー使ってました;)

【ホットキー設置関数】
BOOL RegisterHotKey(HWND , HOT_KEY_ID , MOD_KEY , KEY);
 第1引数:ウィンドウハンドル
 第2引数:ホットキーのID
 第3引数:キー修飾子(MOD_SHIFT , MOD_CONTROL , MOD_ALT)
 第4引数:キー(A〜Zや0〜9など)
 戻り値 :成否(True/False)

【メッセージ】
WM_HOTKEYメッセージ
 ホットキーを押すとメッセージが飛んできます。
 ウィンドウプロシージャのWPARAMにホットキーのIDが入ってきます。

【ホットキー解除関数】
BOOL UnregisterHotKey(hwnd , HOT_KEY_ID);
 第1引数:ウィンドウハンドル
 第2引数:ホットキーのID
 戻り値 :成否(True/False)

【注意事項】
他のソフト等で使用されているホットキーを新しく設定すると、
元々使われていたホットキーが動作しなくなることがあります。
例えば「Ctrl+A」を設定した場合、殆どのエディタ等で「全て選択」を行う「Ctrl+A」が機能しなくなります。



【サンプルコード】

//マクロ定義
#define HOT_KEY_ID 100001

//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg, WPARAM wp, LPARAM lp)
{
	switch(msg)
	{
	case WM_CREATE:
		//Ctrl+1のホットキー設定
		RegisterHotKey(hwnd,HOT_KEY_ID,MOD_CONTROL,'1');
		break;
	case WM_HOTKEY:
		switch(wp)
		{
		case HOT_KEY_ID:
			//
			//ホットキーが押されたときの処理
			//
			break;
		}
		break;
	case WM_DESTROY:	
		//ホットキー解除
		UnregisterHotKey(hwnd,HOT_KEY_ID);
		break;
	default:
		return DefWindowProc(hwnd,msg,wp,lp);
		break;
		
	}
	return 0;
}


コメント
コメントする








    
この記事のトラックバックURL
トラックバック