キー入力を検出
キーボードから入力されたキーが何であるかを判定します。
それを実現する標準関数は以下の3つです。
OnKeyDown : 仮想キーコードを返す(ファンクションキーなどの検出可能)
OnKeyUp : 仮想キーコードを返す(ファンクションキーなどの検出可能)
OnChar : 文字コードを返す
【OnKeyDownの書式】
void 任意のクラス::OnKeyDown(UNIT nChar, UNIT nRepCnt, UNIT nFlags);
nChar : 指定されたキーの仮想キーコード
nRepCnt : キーを押し続けたときの繰り返し回数
nFlags : スキャンコードやその他のキー情報
「nFlagsの意味」
-----------------------------------------------------------------
|ビット位置 | 意味 |
-----------------------------------------------------------------
| 00 | |
| 01 | |
| 02 | |
| 03 | スキャンコード(ハード依存) |
| 04 | |
| 05 | |
| 06 | |
| 07 | |
-----------------------------------------------------------------
| 08 |1:拡張キー(ファンクションキー、テンキー側のキー) |
-----------------------------------------------------------------
| 09 | |
| 10 | 未使用 |
-----------------------------------------------------------------
| 11 | |
| 12 | Windows内部で使用 |
-----------------------------------------------------------------
| 13 | 1:[Alt] + 他キー |
-----------------------------------------------------------------
| 14 | 直前のキー状態 |
-----------------------------------------------------------------
| 15 | 1:キーを押している状態、0:キーを離している状態 |
-----------------------------------------------------------------
OnKeyDown関数はキーボード上のキーが押されたときに呼び出されます。
押されたキー種別はnCharでわかります。ここで渡されるキーコードは
デバイスからの独立性を持つために、あらかじめ用意された仮想キーコード
になります。
キーボードはあるキーを押し続けると連続入力する機能(オートリピート)
を持っています。オートリピートされている時は、入力としてカウントされた
回数がnRepCntで渡されます。またnFlagsでは、各種の補助情報が渡されます。
オートリピートはnFlagsのビット14で以下の用にチェックできます。
if(nFlags & 0x4000)
nRepCntでもチェック出来ますが、繰返し回数の取得が必要ない場合は
こちらの方が便利でしょう。
(注意)尚、この関数はシステムキー([Alt]併用)は受け付けません。
これらの操作は、OnSysKeyDown、OnSysKeyUpで実施します。
また、大文字、小文字の区別はしません。
【OnKeyUpの書式】
void 任意のクラス名::OnKeyUp(UNIT nChar, UNIT nRepCnt, UNIT nFlags);
nChar : 入力キーの仮想キーコード
nRepCnt : キーを押し続けたときの繰り返し回数
nFlags : スキャンコードやその他のキー情報(OnKeyDownと同じ)
押されたキーが離されたとき呼び出されます。その他の基本機能はOnKeyDownと同じ。
【OnCharの書式】
void 任意のクラス名::OnChar(UNIT nChar, UNIT nRepCnt, UNIT nFlags);
nChar : 入力キーの仮想キーコード
nRepCnt : キーを押し続けたときの繰り返し回数
nFlags : スキャンコードやその他のキー情報(OnKeyDownと同じ)
OnChar関数は押された文字の文字コードを返します。
また、大文字、小文字の区別が可能です。
ファンクションキーなどの特殊キーの取得は出来ません。
(備考)これら3関数の呼び出し順序は次の通りです。
@OnKeyDown
AOnChar
BOnKeyUp
【仮想キーコード】
------------------------------------------------
|仮想キーコード |コード| 対応キー |
------------------------------------------------
| VK_LBUTTON | 0x01 | |
------------------------------------------------
| VK_RBUTTON | 0x02 | |
------------------------------------------------
| VK_CANCEL | 0x03 | Ctrl + Break |
------------------------------------------------
| VK_MBUTTON | 0x04 | |
------------------------------------------------
| VK_BACK | 0x08 | BackSpace |
------------------------------------------------
| VK_TAB | 0x09 | Tab |
------------------------------------------------
| VK_CLEAR | 0x0C | Clear |
------------------------------------------------
| VK_RETURN | 0x0D | Enter |
------------------------------------------------
| VK_SHIFT | 0x10 | shift |
------------------------------------------------
| VK_CONTROL | 0x11 | Ctrl |
------------------------------------------------
| VK_MENU | 0x12 | Alt |
------------------------------------------------
| VK_PAUSE | 0x13 | Pause |
------------------------------------------------
| VK_CAPITAL | 0x14 | CapsLock |
------------------------------------------------
| VK_KANA | 0x15 | |
------------------------------------------------
| VK_JUNJA | 0x17 | |
------------------------------------------------
| VK_FINAL | 0x18 | |
------------------------------------------------
| VK_KANJI | 0x19 | |
------------------------------------------------
| VK_ESCAPE | 0x1B | Esc |
------------------------------------------------
| VK_CONVERT | 0x1C | 変換 |
------------------------------------------------
| VK_NONCONVERT | 0x1D | 無変換 |
------------------------------------------------
| VK_ACCEPT | 0x1E | |
------------------------------------------------
| VK_MODECHANGE | 0x1F | |
------------------------------------------------
| VK_SPACE | 0x20 | Space |
------------------------------------------------
| VK_PRIOR | 0x21 | PageUp |
------------------------------------------------
| VK_NEXT | 0x22 | PageDown |
------------------------------------------------
| VK_END | 0x23 | End |
------------------------------------------------
| VK_HOME | 0x24 | Home |
------------------------------------------------
| VK_LEFT | 0x25 | ← |
------------------------------------------------
| VK_UP | 0x26 | ↑ |
------------------------------------------------
| VK_RIGHT | 0x27 | → |
------------------------------------------------
| VK_DOWN | 0x28 | ↓ |
------------------------------------------------
| VK_SELECT | 0x29 | |
------------------------------------------------
| VK_PRINT | 0x2A | |
------------------------------------------------
| VK_EXECUTE | 0x2B | |
------------------------------------------------
| VK_SNAPSHOT | 0x2C | PrintScreen |
------------------------------------------------
| VK_INSERT | 0x2D | Insert |
------------------------------------------------
| VK_DELETE | 0x2E | Delete |
------------------------------------------------
| VK_HELP | 0x2F | |
------------------------------------------------
| VK_0 | 0x30 | 0 |
------------------------------------------------
| VK_1 | 0x31 | 1 |
------------------------------------------------
| VK_2 | 0x32 | 2 |
------------------------------------------------
| VK_3 | 0x33 | 3 |
------------------------------------------------
| VK_4 | 0x34 | 4 |
------------------------------------------------
| VK_5 | 0x35 | 5 |
------------------------------------------------
| VK_6 | 0x36 | 6 |
------------------------------------------------
| VK_7 | 0x37 | 7 |
------------------------------------------------
| VK_8 | 0x38 | 8 |
------------------------------------------------
| VK_9 | 0x39 | 9 |
------------------------------------------------
| VK_A | 0x41 | A |
------------------------------------------------
| VK_B | 0x42 | B |
------------------------------------------------
| VK_C | 0x43 | C |
------------------------------------------------
| VK_D | 0x44 | D |
------------------------------------------------
| VK_E | 0x45 | E |
------------------------------------------------
| VK_F | 0x46 | F |
------------------------------------------------
| VK_G | 0x47 | G |
------------------------------------------------
| VK_H | 0x48 | H |
------------------------------------------------
| VK_I | 0x49 | I |
------------------------------------------------
| VK_J | 0x4A | J |
------------------------------------------------
| VK_K | 0x4B | K |
------------------------------------------------
| VK_L | 0x4C | L |
------------------------------------------------
| VK_M | 0x4D | M |
------------------------------------------------
| VK_N | 0x4E | N |
------------------------------------------------
| VK_O | 0x4F | O |
------------------------------------------------
| VK_P | 0x50 | P |
------------------------------------------------
| VK_Q | 0x51 | Q |
------------------------------------------------
| VK_R | 0x52 | R |
------------------------------------------------
| VK_S | 0x53 | S |
------------------------------------------------
| VK_T | 0x54 | Y |
------------------------------------------------
| VK_U | 0x55 | U |
------------------------------------------------
| VK_V | 0x56 | V |
------------------------------------------------
| VK_W | 0x57 | W |
------------------------------------------------
| VK_X | 0x58 | X |
------------------------------------------------
| VK_Y | 0x59 | Y |
------------------------------------------------
| VK_Z | 0x5A | Z |
------------------------------------------------
| VK_LWIN | 0x5B | 左Win |
------------------------------------------------
| VK_RWIN | 0x5C | 右Win |
------------------------------------------------
| VK_APPS | 0x5D | アプリケーションキー |
------------------------------------------------
| VK_NUMPAD0 | 0x60 | テンキー側の0 |
------------------------------------------------
| VK_NUMPAD1 | 0x61 | |
------------------------------------------------
| VK_NUMPAD2 | 0x62 | |
------------------------------------------------
| VK_NUMPAD3 | 0x63 | |
------------------------------------------------
| VK_NUMPAD4 | 0x64 | |
------------------------------------------------
| VK_NUMPAD5 | 0x65 | |
------------------------------------------------
| VK_NUMPAD6 | 0x66 | |
------------------------------------------------
| VK_NUMPAD7 | 0x67 | |
------------------------------------------------
| VK_NUMPAD8 | 0x68 | |
------------------------------------------------
| VK_NUMPAD9 | 0x69 | |
------------------------------------------------
| VK_MULTIPLY | 0x6A | テンキー側の* |
------------------------------------------------
| VK_ADD | 0x6B | テンキー側の+ |
------------------------------------------------
| VK_SEPARATOR | 0x6C | |
------------------------------------------------
| VK_SUBTRACT | 0x6D | テンキー側の- |
------------------------------------------------
| VK_DECIMAL | 0x6E | テンキー側の. |
------------------------------------------------
| VK_DIVIDE | 0x6F | テンキー側の/ |
------------------------------------------------
| VK_F1 | 0x70 | F1 |
------------------------------------------------
| VK_F2 | 0x71 | |
------------------------------------------------
| VK_F3 | 0x72 | |
------------------------------------------------
| VK_F4 | 0x73 | |
------------------------------------------------
| VK_F5 | 0x74 | |
------------------------------------------------
| VK_F6 | 0x75 | |
------------------------------------------------
| VK_F7 | 0x76 | |
------------------------------------------------
| VK_F8 | 0x77 | |
------------------------------------------------
| VK_F9 | 0x78 | |
------------------------------------------------
| VK_F10 | 0x79 | |
------------------------------------------------
| VK_F11 | 0x7A | |
------------------------------------------------
| VK_F12 | 0x7B | |
------------------------------------------------
| VK_F13 | 0x7C | |
------------------------------------------------
| VK_F14 | 0x7D | |
------------------------------------------------
| VK_F15 | 0x7E | |
------------------------------------------------
| VK_F16 | 0x7F | |
------------------------------------------------
| VK_F17 | 0x80 | |
------------------------------------------------
| VK_F18 | 0x81 | |
------------------------------------------------
| VK_F19 | 0x82 | |
------------------------------------------------
| VK_F20 | 0x83 | |
------------------------------------------------
| VK_F21 | 0x84 | |
------------------------------------------------
| VK_F22 | 0x85 | |
------------------------------------------------
| VK_F23 | 0x86 | |
------------------------------------------------
| VK_F24 | 0x87 | |
------------------------------------------------
| VK_NUMLOCK | 0x90 | NumLock |
------------------------------------------------
| VK_SCROLL | 0x91 | ScrollLock |
------------------------------------------------
| VK_LSHIFT | 0xA0 | |
------------------------------------------------
| VK_RSHIFT | 0xA1 | |
------------------------------------------------
| VK_LCONTROL | 0xA2 | |
------------------------------------------------
| VK_RCONTROL | 0xA3 | |
------------------------------------------------
| VK_LMENU | 0xA4 | |
------------------------------------------------
| VK_RMENU | 0xA5 | |
------------------------------------------------
| VK_PROCESSKEY | 0xE5 | |
------------------------------------------------
| VK_ATTN | 0xF6 | |
------------------------------------------------
| VK_CRSEL | 0xF7 | |
------------------------------------------------
| VK_EXSEL | 0xF8 | |
------------------------------------------------
| VK_PLAY | 0xFA | |
------------------------------------------------
| VK_ZOOM | 0xFB | |
------------------------------------------------
| VK_NONAME | 0xFC | |
------------------------------------------------
| VK_PA1 | 0xFD | |
------------------------------------------------
| VK_OEM_CLEAR | 0xFE | |
------------------------------------------------