環境:VC++6.0 MFCアプリケーション-ダイアログベースです。
状況:
ボタンがクリックされたらキーボードを無効にし
再度ボタンがクリックされたらキーボードを有効にしたいと
思ってます。マウスは常に有効状態を保ちたいと考えてます。
そのキーボードを有効にしたり無効にしたりするのが
わからない状況に至っております。
みなさんのご教授をお願いします。
いろいろあると思いますが、すぐに思いついたのは次のような方法。
(1) アプリケーションクラス(CxxxApp)にキー入力有効/無効のフラグ(例えば bool
m_bEnableKey)を追加
(2) CxxxAppクラスのPreTranslateMassage関数をオーバーライドして、m_bEnableKeyが
falseの時に、WM_KEYDOWN、WM_KEYUPメッセージをディスパッチしないようにする。
// 例
BOOL CxxxApp::PreTranslateMessage(MSG* pMsg)
{
if( !m_bEnableKey )
{
switch( pMsg->message )
{
case WM_KEYDOWN:
case WM_KEYUP:
return TRUE;
}
}
return CWinApp::PreTranslateMessage(pMsg);
}
(3) ダイアログボックスクラス(CxxxDlg)に、キー入力有効/無効切り替え用のボタン
ハンドラを追加
// 例
void CxxxDlg::OnButton()
{
CxxxApp* pApp = static_cast< CxxxApp* >( ::AfxGetApp() );
pApp->m_bEnableKey = !pApp->m_bEnableKey;
}
※CxxxApp::m_bEnableKeyがpublicメンバであるのは面白くないかも知れないが、説明の
都合上ということでご勘弁を。
http://www.kumei.jp/c_lang/sdk2/sdk_161.htm
ここあたりを参考に、keyboard hook のDLL を作成する
以下の
int SetHook()
{
hMyHook = SetWindowsHookEx(WH_KEYBOARD_LL, MyHookProc, hInst, 0);
return 0;
}
ように WH_KEYBOARD_LL を指定すると、Ctrl+Alt+Del 以外は全部取れるはずです
SetWindowsHookEx の引数は調べてくださいな
て、こういうことではない??
そのアプリに対するキー入力を無効にしたいのか、
システムに対するキー入力を無効にしたいのかでやり方が変わると思います。
どちらを希望しているのかをきちんと提示してください。
方法については、既にお二方が書かれているので追記はしません。
どちらがどちらに対応した物かは調べてみればわかると思いますが、
調べてもわからなければ、再度質問でしてください。