キーボードのキーが押されたときの処理は次の通りである。
@キーボードのキーを押すと、キーに対応した2つのスキャンコードが発生する。
キーを押したときにキーとキーを話したときの2回である。
Aスキャンコードはキーボードデバイスドライバが受け取り、仮想キーコードに変換する
Bキーボードレイアウトは、スキャンコード、仮想キーコード、キーストロークの状態などの情報を
メッセージに変換し、システムメッセージキューに送る。
Cシステムは、メッセージをスレッドのメッセージキューにポストする
Dスレッドのメッセージキューは、所定のウィンドウのウィンドウプロシージャにメッセージを送る。
キーボードレイアウト・・・・キーボード上の物理的なキーの配置だけでなく、特定のキーを
押したときに発生する値(デバイス固定のスキャンコードから変換する
デバイスに依存しない仮想キーコード)を定めている。
ユーザーが使用したい言語とキーボードのキーの配置をソフトウェアで
変更できるのがキーボードレイアウト。
例えば、フランス語のキーボードレイアウトにすれば
日本語のキーボードからフランス語を入力できるわけである。
スキャンコード・・・・・・・キーボード上の各キーには
キーを識別するための値が割り当てられている。
これをスキャンコードという。
スキャンコードはデバイスに依存なので、キーボードごとに違う。
仮想キーコード・・・・・・・キーボードからスキャンコードをキーボードドライバが受け取ると
これを仮想キーコードに変換する。
仮想キーコードはデバイスに依存しないコードで、押されたキーの目的を
識別するためにWindowが定義したもの。
この仮想キーコードはVisual BasicのKeyCodeに相当する。
| 関数名 | 機能 | Sample |
| キーボード関数の一覧表示 | ||
| ActivateKeyboardLayout | 指定のキーボードレイアウトを有効にする | なし |
| GetKeyboardLayoutList | キーボードレイアウトのハンドルを取得する | なし |
| GetKeyboardLayout | キーボードレイアウトを取得する | なし |
| GetKeyboardLayoutName | アクティブなキーボードレイアウト名を取得する | なし |
| GetAsyncKeyState | キーボードのキーが押されているかどうかを調べる | なし |
| GetKeyboardState | キーボードの仮想キーの状態を取得する | なし |
| GetKeyNameText | キーボードのキー名を取得する | なし |
| GetKeyState | 仮想キーの押下状態を取得する | なし |
| LoadKeyboardLayout | キーボードレイアウトをロードする | なし |
| UnloadKeyboardLayout | キーボードレイアウトを削除する | なし |
| UnregisterHotKey | ホットキーの登録を削除する | なし |
| RegisterHotKey | ホットキーを登録する | なし |
| SetKeyboardState | キーボードの仮想キーの状態を設定する | なし |
| VkKeyScanEx | ANSI文字を仮想キーコードに変換する | なし |
| MapVirtualKey | 仮想キーコード・ASCII値・スキャンコード間でコードを変換する | なし |
| MapVirtualKeyEx | キーボードレイアウトに従って、仮想キーコード・ASCII値・スキャンコード間でコードを変換する | なし |
| keybd_event | キーストロークをシュミレートする | なし |
| GetKeyboardType | キーボードに関する情報を取得する | なし |