WM_KEYDOWN

WM_KEYDOWN メッセージは、非システムキーが押された場合に、キーボードフォーカスを持つウィンドウにポストされます。非システムキーとは、 [alt] キーが押されていないときに押されたキーのことです。

ウィンドウは、ウィンドウプロシージャを介してこのメッセージを受け取ります。

#define  WM_KEYDOWN      0x0100

nVirtKey = wParam;         // 仮想キーコード
lKeyData = lParam;         // キーデータ

パラメータ

nVirtKey

wParam パラメータの値。

非システムキーの仮想キーコードが指定されます。

lKeyData

lParam パラメータの値。

リピートカウント (ユーザーがキーを押し続けたときに繰り返すキー操作の回数) 、スキャンコード、キー変換コード、直前のキー状態、およびコンテキストコードが指定されます。

ビット 意味
0 〜 15

現在のメッセージのリピートカウントが指定されます。これは、ユーザーがキーを押し続けたことにより自動的に繰り返されたキーストロークの回数です。非常に長く押され続けた場合は、メッセージは送られますが、カウントは累積されません。

16 〜 23

スキャンコードが指定されます。この値は OEM 依存です。

24

拡張キーが押されたかどうかが指定されます。拡張キーの場合は 1 が、それ以外のキーでは 0 が指定されます。

25 〜 28

使用されません。

29

コンテキストコードが格納されます。 WM_KEYDOWN メッセージでは常に 0 になります。

30

直前のキー状態が指定されます。メッセージが送られる前にキーが押されていた場合は 1 が、離されていた場合は 0 が指定されます。

31

変換状態が指定されます。 WM_KEYDOWN メッセージでは常に 0 になります。

解説

[f10] キーが押されている場合は、 DefWindowProc 関数は内部フラグをセットします。 DefWindowProc 関数が WM_KEYUP メッセージを受け取ると、関数は内部フラグが設定されているかどうかをチェックし、設定されている場合にはトップレベルウィンドウに WM_SYSCOMMAND メッセージを送ります。このときの wParam パラメータには SC_KEYMENU がセットされます。

オートリピート機能によって、1回のキーの押し下げで複数の WM_KEYDOWN メッセージが送られてくることがあります。直前のキー状態( lKeyData パラメータのビット 30)を参照することで、最初に押されたことによるものか、継続して押されたことによるものかを調べることができます。

対応情報

Windows 95 以降 / Windows NT 3.1 以降