キー入力イベントを横取りする




久々にこのコンテンツを更新です。
今日はキー入力イベントを横取りしてみましょう。
横取りできないキーイベントもありますが、これを使えばテキストボックス等のキー入力エリア 以外で押されたキーイベントも取得できるので、ショートカット等に使用できます。

(サンプル:COMMSIM_View.cpp)
BOOL CCOMM_SIMView::PreTranslateMessage(MSG* pMsg) 
{
    // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
    
    if(pMsg->message == WM_KEYDOWN)
    {
        if( pMsg->wParam == 0x31 )  // 1がクリックされた場合
        {
            SimErrMsg( "%x : %x", 0, pMsg->wParam, pMsg->lParam );
            return( TRUE );         // 以降の処理で1キーのダウンを処理しない
        }
    }

    return CFormView::PreTranslateMessage(pMsg);
}
クラスウィザードからViewクラスにPreTranslateMessageを追加します。
後は必要なキーイベントの処理を追加するだけです。
キーイベント処理後に、そのキーを引き続き有効にしたくない場合はreturn(TRUE)すれば それ以降のイベントには使用されません。
NEC PC-98のキーボードイベント時に発生するバラメータを書いておきます。
DOS/Vとは若干異なると思いますが参考にはなるでしょう。
Key    wParam  lParam
1      31      20001
2      32      30001
3      33      40001
4      34      50001
5      35      60001
6      36      70001
7      37      80001
8      38      90001
9      39      a0001
-      bd      c0001
^      de      280001
\      dc      2b0001
q      51      100001
w      57      110001
e      45      120001
r      52      130001
t      54      140001
y      59      150001
u      55      160001
i      49      170001
o      4f      180001
p      50      190001
@      c0      290001
[      db      1a0001
a      41      1e0001
s      53      1f0001
d      44      200001
f      46      210001
g      47      220001
h      48      230001
j      4a      240001
k      4b      250001
l      4c      260001
;      bb      d0001
:      ba      270001
]      dd      1b0001
z      5a      2c0001
x      58      2d0001
c      43      2e0001
v      56      2f0001
b      42      300001
n      4e      310001
m      4d      320001
,      bc      330001
.      be      340001
/      bf      350001
(_)    df      550001
[ESC]  1b      10001
[TAB]  9       f0001
[CTRL-L] 11    1d0001
[CAPS] 14      3a0001
[SHIFT-L] 10   2a0001
[かな] 15      11d0001
[WIN-L] 5b     15b0001
[GRPH] 検出不可
[NFER] 1d      5a0001
[SPACE] 20     390001
[BS]   8       e0001
[RET]  d       1c0001
[SHIFT-R] 10   360001
[XFER] 1c      1380001
[WIN-R] 5c     15c0001
[???]  5d      15d0001
[INS]  2d      1520001
[DEL]  2e      1530001
[ROLLUP] 22    1510001
[ROLLDN] 21    1490001
[↑]   26      1480001
[←]   25      14b0001
[→]   27      14d0001
[↓]   28      1500001
[HOMECLR] 24   1470001
[HELP] 23      14f0001
[-]    6d      4a0001
[/]    6f      1350001
[*]    6a      370001
[+]    6b      4e0001
[=]    92      590001
[RET]  d       1c0001
[7]    67      470001
[8]    68      480001
[9]    69      490001
[4]    64      4b0001
[5]    65      4c0001
[6]    66      4d0001
[1]    61      4f0001
[2]    62      500001
[3]    63      510001
[0]    60      520001
[,]    6c      5c0001
[.]    6e      530001
[STOP] 検出不可
[COPY] 検出不可
[F1]   70      3b0001
[F2]   71      3c0001
[F3]   72      3d0001
[F4]   73      3e0001
[F5]   74      3f0001
[F6]   75      400001
[F7]   76      410001
[F8]   77      420001
[F9]   78      430001
[F10] 検出不可(ALTと同様の動き)
[VF1]  7a      570001
[VF2]  7b      580001
[VF3]  7c      5d0001
[VF4]  7d      5e0001
[VF5]  7e      5f0001




N総研ソフトウェア開発部のTOPに戻る。

このページに関するご意見・質問は
ドンタコスN村 E-mail:wnaka@coco.ned.co.jp
まで送信してください。