キーボード – プログラミング – Home

通知
すべてクリア

キーボード


のぼる
 のぼる
(@のぼる)
ゲスト
結合: 20年前
投稿: 1
Topic starter  

環境:VC++6.0 MFCアプリケーション-ダイアログベースです。

状況:
ボタンがクリックされたらキーボードを無効にし
再度ボタンがクリックされたらキーボードを有効にしたいと
思ってます。マウスは常に有効状態を保ちたいと考えてます。

そのキーボードを有効にしたり無効にしたりするのが
わからない状況に至っております。
みなさんのご教授をお願いします。


引用解決済
トピックタグ
monkey
 monkey
(@monkey)
ゲスト
結合: 21年前
投稿: 70
 

いろいろあると思いますが、すぐに思いついたのは次のような方法。

(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メンバであるのは面白くないかも知れないが、説明の
都合上ということでご勘弁を。


返信引用
あいる
 あいる
(@あいる)
ゲスト
結合: 20年前
投稿: 55
 

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 の引数は調べてくださいな

て、こういうことではない??


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

そのアプリに対するキー入力を無効にしたいのか、
システムに対するキー入力を無効にしたいのかでやり方が変わると思います。
どちらを希望しているのかをきちんと提示してください。

方法については、既にお二方が書かれているので追記はしません。
どちらがどちらに対応した物かは調べてみればわかると思いますが、
調べてもわからなければ、再度質問でしてください。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました