No.3ベストアンサー
- 回答日時:
一番簡単な方法は、メッセージループで処理を切ることです。
F10などのシステムキーを押したとき、ウィンドウには WM_SYSKEYDOWN メッセージが飛んできます。
これを Translate & Dispatch することでフォーカスがメニューに移ります。
なので、WinSDKであれば
while( GetMessage(&msg, NULL, 0, 0) )
{
if( msg.message == WM_SYSKEYDOWN && msg.wParam == VK_F10 )
{
処理
}
else
{
TranslateMessage
DispatchMessage
}
}
という感じです。(エラーチェックとか無視してます)
MFCならば、PretranslateMessageをオーバーライドして
BOOL CXXX::PreTranslateMessage(MSG* pMsg)
{
if( pMsg->message == WM_SYSKEYDOWN && pMsg->wParam == VK_F10 )
{
return TRUE;
}
return CXXXWnd::PreTranslateMessage(pMsg);
}
みたいな感じで、TRUEを返してやります。
要するに、TranslateされることでWindows標準の処理がされるので、その前にメッセージをきります。
ウィンドウプロシージャには、TranslateおよびDispatchされたあとにメッセージが飛んでくるので、どうやっても対処できません。
No.2
- 回答日時:
#1です。
補足です。
::RegisterHotKey( hWnd , id , 0 , VK_F10 );
を使った後F10を押すとWM_HOTKEYが飛んできます。
そこでKeyDownイベントの処理をしてください。
RegisterHotKeyで複数登録してもWPARAMにidが入っているのでどのキーかの判断が可能です。
詳細はMSDNを参照してください。
No.1
- 回答日時:
WinAPIのRegisterHotKeyでF10を無効化できると思います。
他にも同じくWinAPIのSetWindowHookEx( WH_KEYBOARD_LL ・・・
でキーボード入力をフックする方法もあります。
// ユニークなID取得
static int id = ::GlobalAddAtom(_T("RegisterHotKey"));
// F10を無効化
::RegisterHotKey( hWnd , id , 0 , VK_F10 );
// F10を有効に戻す
::UnregisterHotKey( hWnd , id );
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) フレームワーク「4.8.1」で、[Sub Main]が動かない。助けて下さい 3 2022/11/14 15:40
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- 楽器・演奏 ★この考え方 どう思われますかぁ? 5 2023/06/08 16:44
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Android(アンドロイド) AQUOS ZEROの使い方教えて下さい 2 2022/03/27 17:21
- Access(アクセス) Access の SetFocus について教えてください 5 2022/08/04 07:32
- その他(プログラミング・Web制作) Microsoft Forms とか、それに似たツールで計算をすることはできないか? 2 2023/01/14 11:26
- 一眼レフカメラ レンズ交換できるカメラの購入について 7 2022/09/30 09:22
- Excel(エクセル) エクセル会員名簿について。 Yahooメールの連絡先で、AさんCさんにチェックをつけて別のグループに 2 2023/03/27 20:33
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージBOXの「はい」「いい...
-
「キャンセル」ボタン付きの処...
-
VBSで応答不要のメッセージボッ...
-
ASP.NETでのメッセージ画面を出...
-
メッセージボックスのボタン名変更
-
ACCESS側からEXCELの書式を設定...
-
DoEvents
-
VCでウエイトをミリ秒でかけ...
-
VBA kernel32 の意味
-
【C#】 あるイベントから別イ...
-
Excel VBA 自動的に閉じるMsgBox
-
マルチスレッドを実現したい
-
VBA メッセージボックスを自動...
-
キーボード入力、マウス操作を...
-
VB6 コマンドボタン クリック...
-
【KeyDown】キーコードについて
-
VB.NETのUsingキーワードの使い方
-
PostMessageの連続送信
-
EXCEL VBA「Application.Displa...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
ACCESS側からEXCELの書式を設定...
-
VBSで応答不要のメッセージボッ...
-
VBA kernel32 の意味
-
エクセルVBAでクリップボード内...
-
【C#】 あるイベントから別イ...
-
Excel VBA で処理中断(DoEvents...
-
VBA メッセージボックスを自動...
-
Application.ScreenUpdating=Fa...
-
Excel VBA 自動的に閉じるMsgBox
-
ASP.NETでのメッセージ画面を出...
-
メッセージBOXの「はい」「いい...
-
「キャンセル」ボタン付きの処...
-
B列に特定の文字列が入っている...
-
シャットダウン時のExcel強制終...
-
ASP VBScriptでスクリプト実行...
-
起動後直に実行するコードはど...
-
MFCのメニューバーのイベント取得
-
アクセスでのキー送信について
おすすめ情報