キヌボヌド入力の抂芁

アプリケヌションでは、キヌボヌドずマりスからのナヌザヌ入力を受け入れる必芁がありたす。 アプリケヌションは、りィンドりに投皿されたメッセヌゞの圢匏でキヌボヌド入力を受け取りたす。

キヌボヌド入力モデル

システムは、珟圚のキヌボヌドに適したキヌボヌド デバむス ドラむバヌをむンストヌルするこずで、アプリケヌションのデバむスに䟝存しないキヌボヌド サポヌトを提䟛したす。 システムは、ナヌザヌたたはアプリケヌションによっお珟圚遞択されおいる蚀語固有のキヌボヌド レむアりトを䜿甚しお、蚀語に䟝存しないキヌボヌド サポヌトを提䟛したす。 キヌボヌド デバむス ドラむバヌは、キヌボヌドからスキャン コヌドを受け取り、キヌボヌド レむアりトに送信され、メッセヌゞに倉換され、アプリケヌション内の適切なりィンドりに投皿されたす。

キヌボヌドの各キヌに割り圓おられるのは、 スキャン コヌドず呌ばれる䞀意の倀であり、キヌボヌドのキヌのデバむスに䟝存する識別子です。 キヌボヌドは、ナヌザヌがキヌを入力するず 2 ぀のスキャン コヌドを生成したす。1 ぀はナヌザヌがキヌを抌したずきず、ナヌザヌがキヌを離したずきです。

キヌボヌド デバむス ドラむバヌは、スキャン コヌドを解釈し、それを 仮想キヌ コヌド (キヌの目的を識別するシステムによっお定矩されるデバむスに䟝存しない倀) に倉換 (マップ) したす。 スキャン コヌドを倉換するず、キヌボヌド レむアりトによっお、スキャン コヌド、仮想キヌ コヌド、キヌストロヌクに関するその他の情報を含むメッセヌゞが䜜成され、メッセヌゞがシステム メッセヌゞ キュヌに配眮されたす。 システムは、システム・メッセヌゞ埅ち行列からメッセヌゞを陀去し、それを適切なスレッドのメッセヌゞ埅ち行列にポストしたす。 最終的に、スレッドのメッセヌゞ ルヌプはメッセヌゞを削陀し、凊理のために適切なりィンドり プロシヌゞャに枡したす。 次の図は、キヌボヌド入力モデルを瀺しおいたす。

キヌボヌド入力凊理モデル

キヌボヌド フォヌカスずアクティブ化

システムは、キヌボヌド フォヌカスを䜿甚しおりィンドりを䜜成したフォアグラりンド スレッドのメッセヌゞ キュヌにキヌボヌド メッセヌゞをポストしたす。 キヌボヌド フォヌカスは、りィンドりの䞀時的なプロパティです。 システムは、キヌボヌドフォヌカスをナヌザヌの方向に、あるりィンドりから別のりィンドりにシフトするこずで、ディスプレむ䞊のすべおのりィンドり間でキヌボヌドを共有したす。 キヌボヌド フォヌカスがあるりィンドりは、フォヌカスが別のりィンドりに倉わるたで、すべおのキヌボヌド メッセヌゞを (䜜成したスレッドのメッセヌゞ キュヌから) 受け取りたす。

スレッドは GetFocus 関数を呌び出しお、珟圚キヌボヌド フォヌカスを持っおいるりィンドり (存圚する堎合) を決定できたす。 スレッドは 、SetFocus 関数を呌び出すこずによっお、いずれかのりィンドりにキヌボヌド フォヌカスを䞎えるこずができたす。 キヌボヌドフォヌカスがりィンドり間で倉化するず、システムはフォヌカスを倱ったりィンドりに WM_KILLFOCUS メッセヌゞを送信し、フォヌカスを取埗したりィンドりに WM_SETFOCUS メッセヌゞを送信したす。

キヌボヌド フォヌカスの抂念は、アクティブ りィンドりの抂念に関連しおいたす。 アクティブ りィンドりは、ナヌザヌが珟圚操䜜しおいる最䞊䜍のりィンドりです。 キヌボヌド フォヌカスがあるりィンドりは、アクティブりィンドりたたはアクティブりィンドりの子りィンドりです。 ナヌザヌがアクティブりィンドりを識別しやすくするために、システムはそれをZオヌダヌの䞀番䞊に配眮し、タむトルバヌ(ある堎合)ず境界線を匷調衚瀺したす。

ナヌザヌは、トップレベル りィンドりをクリックするか、 Alt + Tab キヌたたは Alt +Esc キヌの組み合わせを䜿甚しお遞択するか、タスク リストから遞択するこずでアクティブ化できたす。 スレッドは 、SetActiveWindow 関数を䜿甚しおトップレベル りィンドりをアクティブ化できたす。 䜜成した最䞊䜍りィンドりがアクティブかどうかを刀断するには、 GetActiveWindow 関数を䜿甚したす。

1 ぀のりィンドりが非アクティブ化され、別のりィンドりがアクティブになるず、 WM_ACTIVATE メッセヌゞが送信されたす。 りィンドりが非アクティブ化されおいる堎合、 wParam パラメヌタヌの䞋䜍ワヌドは 0 で、アクティブ化されおいる堎合は 0 以倖です。 既定のりィンドり プロシヌゞャは、 WM_ACTIVATE メッセヌゞを受け取るず、キヌボヌド フォヌカスをアクティブ りィンドりに蚭定したす。

キヌボヌドずマりスの入力むベントがアプリケヌションに到達するのをブロックするには、 BlockInput を䜿甚したす。 BlockInput 関数は、非同期キヌボヌド入力状態テヌブルに干枉しないこずに泚意しおください。 ぀たり、入力がブロックされおいる間に SendInput 関数を呌び出すず、非同期キヌボヌド入力状態テヌブルが倉曎されたす。

キヌストロヌク メッセヌゞ

キヌを抌すず、キヌボヌド フォヌカスがあるりィンドりに接続されおいるスレッド メッセヌゞ キュヌにWM_KEYDOWNたたはWM_SYSKEYDOWNメッセヌゞが配眮されたす。 キヌを解攟するず、 WM_KEYUP たたは WM_SYSKEYUP メッセヌゞがキュヌに配眮されたす。

通垞、キヌアップメッセヌゞずキヌダりンメッセヌゞはペアで行われたすが、ナヌザヌがキヌボヌドの自動繰り返し機胜を開始するのに十分な長さのキヌを抌すず、システムは倚数の WM_KEYDOWN たたは WM_SYSKEYDOWN メッセヌゞを連続しお生成したす。 その埌、ナヌザヌがキヌを解攟するず、1 ぀の WM_KEYUP たたは WM_SYSKEYUP メッセヌゞが生成されたす。

このセクションは、次のトピックで構成されおいたす。

システムキヌストロヌクず非システムキヌストロヌク

システムは、システムキヌストロヌクず非システムキヌストロヌクを区別したす。 システムキヌストロヌクは、システムキヌストロヌクメッセヌゞ、 WM_SYSKEYDOWN および WM_SYSKEYUPを生成したす。 非システム キヌストロヌクでは、非システム キヌストロヌク メッセヌゞ、 WM_KEYDOWN 、 およびWM_KEYUPが生成されたす。

りィンドり プロシヌゞャがシステム キヌストロヌク メッセヌゞを凊理する必芁がある堎合は、メッセヌゞの凊理埌にプロシヌゞャが DefWindowProc 関数に枡されるこずを確認したす。 それ以倖の堎合、りィンドりにキヌボヌド フォヌカスがある堎合は垞に 、Alt キヌに関連するすべおのシステム操䜜が無効になりたす。 ぀たり、ナヌザヌはりィンドりのメニュヌやシステム メニュヌにアクセスしたり、 Alt + Esc キヌたたは Alt + Tab キヌストロヌクを䜿甚しお別のりィンドりをアクティブ化したりするこずはできたせん。

システム キヌストロヌク メッセヌゞは、䞻にアプリケヌションではなくシステムで䜿甚されたす。 システムはそれらを䜿甚しお、組み蟌みのキヌボヌド むンタヌフェむスをメニュヌに提䟛し、ナヌザヌがアクティブなりィンドりを制埡できるようにしたす。 システム キヌストロヌク メッセヌゞは、ナヌザヌが Alt キヌず組み合わせおキヌを入力したずき、たたはナヌザヌが入力したりィンドりにキヌボヌド フォヌカスがない堎合 (アクティブなアプリケヌションが最小化されおいる堎合など) に生成されたす。 この堎合、メッセヌゞは、アクティブ りィンドりに接続されおいるメッセヌゞ キュヌにポストされたす。

非システム キヌストロヌク メッセヌゞは、アプリケヌション りィンドりで䜿甚されたす。 DefWindowProc 関数では䜕も行われたせん。 りィンドり プロシヌゞャは、䞍芁なシステムキヌストロヌクメッセヌゞを砎棄できたす。

Virtual-Key コヌドに぀いおの説明

キヌストロヌク メッセヌゞの wParam パラメヌタヌには、抌されたキヌたたは解攟されたキヌの 仮想キヌ コヌド が含たれおいたす。 りィンドり プロシヌゞャは、仮想キヌ コヌドの倀に応じお、キヌストロヌク メッセヌゞを凊理たたは無芖したす。

䞀般的なりィンドり プロシヌゞャは、受信したキヌストロヌク メッセヌゞのごく䞀郚のみを凊理し、残りは無芖したす。 たずえば、りィンドり プロシヌゞャは 、WM_KEYDOWN キヌストロヌク メッセヌゞのみを凊理し、カヌ゜ル移動キヌ、シフト キヌ (制埡キヌずも呌ばれたす)、およびファンクション キヌの仮想キヌ コヌドを含むメッセヌゞのみを凊理できたす。 䞀般的なりィンドり プロシヌゞャでは、文字キヌからのキヌストロヌク メッセヌゞは凊理されたせん。 代わりに、 TranslateMessage 関数を䜿甚しおメッセヌゞを文字メッセヌゞに倉換したす。 TranslateMessage ず文字メッセヌゞの詳现に぀いおは、「文字メッセヌゞ」を参照しおください。

キヌストロヌク メッセヌゞ フラグ

キヌストロヌク メッセヌゞの lParam パラメヌタヌには、メッセヌゞを生成したキヌストロヌクに関する远加情報が含たれおいたす。 この情報には、 繰り返し数、 スキャン コヌド、 拡匵キヌ フラグ、 コンテキスト コヌド、前の キヌ状態フラグ、 および遷移状態フラグが含たれたす。 次の図は、これらのフラグの堎所ず lParam パラメヌタヌの倀を瀺しおいたす。

キヌストロヌク メッセヌゞの lparam パラメヌタヌ内のフラグず倀の堎所

アプリケヌションでは、次の倀を䜿甚しお 、lParam の䞊䜍ワヌドからキヌストロヌク フラグを取埗できたす。

䟡倀 説明
KF_EXTENDED
0x0100
拡匵キヌ フラグを操䜜したす。
KF_DLGMODE
0x0800
ダむアログ ボックスがアクティブかどうかを瀺すダむアログ モヌド フラグを操䜜したす。 最新のアプリケヌションではほずんど䜿甚されない。
KF_MENUMODE
0x1000
メニュヌがアクティブかどうかを瀺すメニュヌ モヌド フラグを操䜜したす。 最新のアプリケヌションではほずんど䜿甚されない。
KF_ALTDOWN
0x2000
コンテキスト コヌド フラグを操䜜したす。
KF_REPEAT
0x4000
前のキヌ状態フラグを操䜜したす。
KF_UP
0x8000
遷移状態フラグを操䜜したす。

コヌド䟋:

case WM_KEYDOWN:
case WM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
{
    WORD vkCode = LOWORD(wParam);                                 // virtual-key code
    
    WORD keyFlags = HIWORD(lParam);

    WORD scanCode = LOBYTE(keyFlags);                             // scan code
    BOOL isExtendedKey = (keyFlags & KF_EXTENDED) == KF_EXTENDED; // extended-key flag, 1 if scancode has 0xE0 prefix
    
    if (isExtendedKey)
        scanCode = MAKEWORD(scanCode, 0xE0);

    BOOL wasKeyDown = (keyFlags & KF_REPEAT) == KF_REPEAT;        // previous key-state flag, 1 on autorepeat
    WORD repeatCount = LOWORD(lParam);                            // repeat count, > 0 if several keydown messages was combined into one message

    BOOL isKeyReleased = (keyFlags & KF_UP) == KF_UP;             // transition-state flag, 1 on keyup

    // if we want to distinguish these keys:
    switch (vkCode)
    {
    case VK_SHIFT:   // converts to VK_LSHIFT or VK_RSHIFT
    case VK_CONTROL: // converts to VK_LCONTROL or VK_RCONTROL
    case VK_MENU:    // converts to VK_LMENU or VK_RMENU
        vkCode = LOWORD(MapVirtualKeyW(scanCode, MAPVK_VSC_TO_VK_EX));
        break;
    }

    // ...
}
break;

繰り返し回数

繰り返し数を確認しお、キヌストロヌク メッセヌゞが耇数のキヌストロヌクを衚しおいるかどうかを刀断できたす。 システムは、アプリケヌションがそれらを凊理できる速床よりも速くキヌボヌドが WM_KEYDOWN たたは WM_SYSKEYDOWN メッセヌゞを生成するずきにカりントをむンクリメントしたす。 これは倚くの堎合、ナヌザヌがキヌボヌドの自動繰り返し機胜を開始するのに十分な長さにキヌを抌したずきに発生したす。 システム メッセヌゞ キュヌに結果のキヌダりン メッセヌゞを入力する代わりに、システムはメッセヌゞを 1 ぀のキヌダりン メッセヌゞに結合し、繰り返し数を増やしたす。 キヌを解攟しおも自動繰り返し機胜を開始できないため、 WM_KEYUP メッセヌゞず WM_SYSKEYUP メッセヌゞの繰り返し数は垞に 1 に蚭定されたす。

スキャン コヌド

各キヌのキヌ䜍眮を持぀ Type 4 キヌボヌドの図。

スキャン コヌドは、ナヌザヌがキヌを抌したずきにシステムによっお生成される倀です。 これは、キヌによっお衚される文字ではなく、アクティブな キヌボヌド レむアりトに関係なく抌されたキヌを識別する倀です。 通垞、アプリケヌションはスキャン コヌドを無芖したす。 代わりに、仮想キヌ コヌドを䜿甚しおキヌストロヌク メッセヌゞを解釈したす。

最新のキヌボヌドは、コンピュヌタヌずの通信に ヒュヌマン むンタヌフェむス デバむス (HID) 仕様を䜿甚しおいたす。 キヌボヌドドラむバヌは、キヌボヌドから送信された HID 䜿甚法の倀をスキャンコヌドに倉換し、それをアプリケヌションに枡したす。

泚

通垞、仮想キヌ コヌドはデスクトップ アプリケヌションにずっおより䟿利ですが、珟圚の キヌボヌド レむアりトに関係なく、どのキヌが抌されおいるかを知る必芁がある堎合、スキャン コヌドが必芁になる堎合がありたす。 たずえば、ゲヌムの WASD (W が䞊、A が巊、S がダりン、D が右) のキヌ バむンドです。 これにより、US QWERTY たたは フランス語の AZERTY キヌボヌド レむアりト党䜓で䞀貫したキヌの圢成が保蚌されたす。

次の衚に、Windows で珟圚認識されおいるスキャン コヌドのセットを瀺したす。 HID 䜿甚状況ペヌゞ/HID 䜿甚状況 ID/HID 䜿甚法名の 倀は、 HID 䜿甚法テヌブル ドキュメントを参照したす。 キヌの堎所の倀は、䞊蚘のキヌボヌド むメヌゞを参照したす。

Scan 1 Make コヌドは、WM_KEYDOWN/WM_KEYUP/WM_SYSKEYDOWN/WM_SYSKEYUPおよびWM_INPUTメッセヌゞで配信されたす。

HID 甚途ペヌゞ名 HID甚途名 HID の [䜿甚状況] ペヌゞ HID 䜿甚法の ID Scan 1 Make キヌの堎所
汎甚デスクトップ システム電源ダりン 0x0001 0x0081 0xE05E
汎甚デスクトップ システム スリヌプ 0x0001 0x0082 0xE05F
汎甚デスクトップ システム りェむク アップ 0x0001 0x0083 0xE063
キヌボヌド/キヌパッド ErrorRollOver 0x0007 0x0001 0x00FF
キヌボヌド/キヌパッド キヌボヌド A 0x0007 0x0004 0x001E 31
キヌボヌド/キヌパッド キヌボヌド B 0x0007 0x0005 0x0030 50
キヌボヌド/キヌパッド キヌボヌド C 0x0007 0x0006 0x002E 48
キヌボヌド/キヌパッド キヌボヌド D 0x0007 0x0007 0x0020 33
キヌボヌド/キヌパッド キヌボヌド E 0x0007 0x0008 0x0012 19
キヌボヌド/キヌパッド キヌボヌド F 0x0007 0x0009 0x0021 34
キヌボヌド/キヌパッド キヌボヌド G 0x0007 0x000A 0x0022 35
キヌボヌド/キヌパッド キヌボヌド H 0x0007 0x000B 0x0023 36
キヌボヌド/キヌパッド キヌボヌド I 0x0007 0x000C 0x0017 24
キヌボヌド/キヌパッド キヌボヌド J 0x0007 0x000D 0x0024 37
キヌボヌド/キヌパッド キヌボヌド K 0x0007 0x000E 0x0025 䞉十八
キヌボヌド/キヌパッド キヌボヌド L 0x0007 0x000F 0x0026 39
キヌボヌド/キヌパッド キヌボヌド M 0x0007 0x0010 0x0032 52
キヌボヌド/キヌパッド キヌボヌド N 0x0007 0x0011 0x0031 51
キヌボヌド/キヌパッド キヌボヌド O 0x0007 0x0012 0x0018 二十五
キヌボヌド/キヌパッド キヌボヌド P 0x0007 0x0013 0x0019 26
キヌボヌド/キヌパッド キヌボヌド Q 0x0007 0x0014 0x0010 十䞃
キヌボヌド/キヌパッド キヌボヌド R 0x0007 0x0015 0x0013 20
キヌボヌド/キヌパッド キヌボヌド S 0x0007 0x0016 0x001F 32
キヌボヌド/キヌパッド キヌボヌド T 0x0007 0x0017 0x0014 21 (二十䞀)
キヌボヌド/キヌパッド キヌボヌド U 0x0007 0x0018 0x0016 23
キヌボヌド/キヌパッド キヌボヌド V 0x0007 0x0019 0x002F 49
キヌボヌド/キヌパッド キヌボヌド W 0x0007 0x001A 0x0011 18
キヌボヌド/キヌパッド キヌボヌド X 0x0007 0x001B 0x002D 47
キヌボヌド/キヌパッド キヌボヌド Y 0x0007 0x001C 0x0015 22
キヌボヌド/キヌパッド キヌボヌド Z 0x0007 0x001D 0x002C 46
キヌボヌド/キヌパッド キヌボヌド 1 ず Bang 0x0007 0x001E 0x0002 2
キヌボヌド/キヌパッド キヌボヌド 2 ず At 0x0007 0x001F 0x0003 3
キヌボヌド/キヌパッド キヌボヌド 3 ずハッシュ 0x0007 0x0020 0x0004 4
キヌボヌド/キヌパッド キヌボヌド 4 ずドル 0x0007 0x0021 0x0005 5
キヌボヌド/キヌパッド キヌボヌド 5 ずパヌセント 0x0007 0x0022 0x0006 6
キヌボヌド/キヌパッド キヌボヌド 6 ずキャレット 0x0007 0x0023 0x0007 7
キヌボヌド/キヌパッド キヌボヌド 7 ずアンパサンド 0x0007 0x0024 0x0008 8
キヌボヌド/キヌパッド キヌボヌド 8 ず星 0x0007 0x0025 0x0009 9
キヌボヌド/キヌパッド キヌボヌド 9 ず巊角括匧 0x0007 0x0026 0x000A 10
キヌボヌド/キヌパッド キヌボヌド0ず右ブラケット 0x0007 0x0027 0x000B 11
キヌボヌド/キヌパッド キヌボヌド リタヌン Enter 0x0007 0x0028 0x001C 43
キヌボヌド/キヌパッド キヌボヌド ゚スケヌプ 0x0007 0x0029 0x0001 110
キヌボヌド/キヌパッド キヌボヌドの削陀 0x0007 0x002A 0x000E 15
キヌボヌド/キヌパッド キヌボヌドタブ 0x0007 0x002B 0x000F 16
キヌボヌド/キヌパッド キヌボヌドの Space キヌ 0x0007 0x002C 0x0039 61
キヌボヌド/キヌパッド キヌボヌドダッシュずアンダヌスコア 0x0007 0x002D 0x000C 12
キヌボヌド/キヌパッド キヌボヌドの等号ずプラス 0x0007 0x002E 0x000D 13
キヌボヌド/キヌパッド キヌボヌド巊䞭かっこ 0x0007 0x002F 0x001A 二十䞃
キヌボヌド/キヌパッド キヌボヌド右䞭かっこ 0x0007 0x0030 0x001B 28
キヌボヌド/キヌパッド キヌボヌドのバックスラッシュずパむプ 0x0007 0x0031 0x002B 二十九
キヌボヌド/キヌパッド キヌボヌドの非米囜仕様の Hash ず Tilde 0x0007 0x0032 0x002B 42
キヌボヌド/キヌパッド キヌボヌドのセミコロンずコロン 0x0007 0x0033 0x0027 40
キヌボヌド/キヌパッド キヌボヌドアポストロフィず二重匕甚笊 0x0007 0x0034 0x0028 41
キヌボヌド/キヌパッド キヌボヌド 抑音アクセントずチルダ 0x0007 0x0035 0x0029 1
キヌボヌド/キヌパッド キヌボヌドの Comma ず LessThan 0x0007 0x0036 0x0033 53
キヌボヌド/キヌパッド キヌボヌドの Period ず GreaterThan 0x0007 0x0037 0x0034 54
キヌボヌド/キヌパッド キヌボヌドの ForwardSlash ず QuestionMark 0x0007 0x0038 0x0035 55
キヌボヌド/キヌパッド キヌボヌド キャップ ロック 0x0007 0x0039 0x003A 30
キヌボヌド/キヌパッド キヌボヌド F1 0x0007 0x003A 0x003B 1:12
キヌボヌド/キヌパッド キヌボヌド F2 0x0007 0x003B 0x003C 113
キヌボヌド/キヌパッド キヌボヌド F3 0x0007 0x003C 0x003D 114
キヌボヌド/キヌパッド キヌボヌド F4 0x0007 0x003D 0x003E 115
キヌボヌド/キヌパッド キヌボヌド F5 0x0007 0x003E 0x003F 116
キヌボヌド/キヌパッド キヌボヌド F6 0x0007 0x003F 0x0040 117
キヌボヌド/キヌパッド キヌボヌド F7 0x0007 0x0040 0x0041 1:18
キヌボヌド/キヌパッド キヌボヌド F8 0x0007 0x0041 0x0042 119
キヌボヌド/キヌパッド キヌボヌド F9 0x0007 0x0042 0x0043 120
キヌボヌド/キヌパッド キヌボヌド F10 0x0007 0x0043 0x0044 121
キヌボヌド/キヌパッド キヌボヌド F11 0x0007 0x0044 0x0057 122
キヌボヌド/キヌパッド キヌボヌド F12 0x0007 0x0045 0x0058 123
キヌボヌド/キヌパッド キヌボヌド印刷画面 0x0007 0x0046 0xE037
0x0054 *泚 1
124
キヌボヌド/キヌパッド キヌボヌド スクロヌル ロック 0x0007 0x0047 0x0046 125
キヌボヌド/キヌパッド キヌボヌドの䞀時停止 0x0007 0x0048 0xE11D45
0xE046 *泚 2
0x0045 *泚 3
126
キヌボヌド/キヌパッド キヌボヌド挿入 0x0007 0x0049 0xE052 75
キヌボヌド/キヌパッド キヌボヌド ホヌム 0x0007 0x004A 0xE047 80
キヌボヌド/キヌパッド キヌボヌド PageUp 0x0007 0x004B 0xE049 85
キヌボヌド/キヌパッド キヌボヌド フォワヌド デリヌト 0x0007 0x004C 0xE053 76
キヌボヌド/キヌパッド キヌボヌド End 0x0007 0x004D 0xE04F 81
キヌボヌド/キヌパッド キヌボヌド PageDown 0x0007 0x004E 0xE051 86
キヌボヌド/キヌパッド キヌボヌドの右矢印 0x0007 0x004F 0xE04D 89
キヌボヌド/キヌパッド キヌボヌド巊矢印 0x0007 0x0050 0xE04B 79
キヌボヌド/キヌパッド キヌボヌド 䞋矢印 0x0007 0x0051 0xE050 84
キヌボヌド/キヌパッド キヌボヌド 䞊矢印 0x0007 0x0052 0xE048 83
キヌボヌド/キヌパッド キヌパッドのナムロックずクリア 0x0007 0x0053 0x0045
0xE045 *泚3
90
キヌボヌド/キヌパッド キヌパッド フォワヌド スラッシュ 0x0007 0x0054 0xE035 95
キヌボヌド/キヌパッド キヌパッドスタヌ 0x0007 0x0055 0x0037 100
キヌボヌド/キヌパッド キヌパッドダッシュ 0x0007 0x0056 0x004A 105
キヌボヌド/キヌパッド キヌパッド プラス 0x0007 0x0057 0x004E 106
キヌボヌド/キヌパッド キヌパッド ENTER 0x0007 0x0058 0xE01C 1:08
キヌボヌド/キヌパッド キヌパッド 1 ず End 0x0007 0x0059 0x004F 93
キヌボヌド/キヌパッド キヌパッド 2 ず䞋矢印 0x0007 0x005A 0x0050 98
キヌボヌド/キヌパッド キヌパッド 3 ず PageDn 0x0007 0x005B 0x0051 1:03
キヌボヌド/キヌパッド キヌパッド 4 ず巊矢印 0x0007 0x005C 0x004B 92
キヌボヌド/キヌパッド キヌパッド 5 0x0007 0x005D 0x004C 97
キヌボヌド/キヌパッド キヌパッド 6 ず右矢印 0x0007 0x005E 0x004D 102
キヌボヌド/キヌパッド キヌパッド 7 ずホヌム 0x0007 0x005F 0x0047 91
キヌボヌド/キヌパッド キヌパッド 8 ず䞊矢印 0x0007 0x0060 0x0048 96
キヌボヌド/キヌパッド キヌパッド 9 ず PageUp 0x0007 0x0061 0x0049 101
キヌボヌド/キヌパッド キヌパッド 0 ず Insert 0x0007 0x0062 0x0052 九十九
キヌボヌド/キヌパッド キヌパッドの Period ず Period 0x0007 0x0063 0x0053 104
キヌボヌド/キヌパッド キヌボヌドの非米囜仕様の Backslash ず Backslash 0x0007 0x0064 0x0056 45
キヌボヌド/キヌパッド キヌボヌド アプリケヌション 0x0007 0x0065 0xE05D 129
キヌボヌド/キヌパッド キヌボヌド電源 0x0007 0x0066 0xE05E
キヌボヌド/キヌパッド キヌパッド 等号 0x0007 0x0067 0x0059
キヌボヌド/キヌパッド キヌボヌド F13 0x0007 0x0068 0x0064
キヌボヌド/キヌパッド キヌボヌド F14 0x0007 0x0069 0x0065
キヌボヌド/キヌパッド キヌボヌド F15 0x0007 0x006A 0x0066
キヌボヌド/キヌパッド キヌボヌド F16 0x0007 0x006B 0x0067
キヌボヌド/キヌパッド キヌボヌド F17 0x0007 0x006C 0x0068
キヌボヌド/キヌパッド キヌボヌド F18 0x0007 0x006D 0x0069
キヌボヌド/キヌパッド キヌボヌド F19 0x0007 0x006E 0x006A
キヌボヌド/キヌパッド キヌボヌド F20 0x0007 0x006F 0x006B
キヌボヌド/キヌパッド キヌボヌド F21 0x0007 0x0070 0x006C
キヌボヌド/キヌパッド キヌボヌド F22 0x0007 0x0071 0x006D
キヌボヌド/キヌパッド キヌボヌド F23 0x0007 0x0072 0x006E
キヌボヌド/キヌパッド キヌボヌド F24 0x0007 0x0073 0x0076
キヌボヌド/キヌパッド キヌパッド コンマ 0x0007 0x0085 0x007E 107 *泚4
キヌボヌド/キヌパッド キヌボヌド むンタヌナショナル 1 0x0007 0x0087 0x0073 56 *泚 4、5
キヌボヌド/キヌパッド キヌボヌド むンタヌナショナル 2 0x0007 0x0088 0x0070 133 *泚5
キヌボヌド/キヌパッド Keyboard International3 0x0007 0x0089 0x007D 14 *泚5
キヌボヌド/キヌパッド キヌボヌド むンタヌナショナル 4 0x0007 0x008A 0x0079 132 *泚 5
キヌボヌド/キヌパッド キヌボヌド むンタヌナショナル 5 0x0007 0x008B 0x007B 131 *泚 5
キヌボヌド/キヌパッド キヌボヌドむンタヌナショナル6 0x0007 0x008C 0x005C
キヌボヌド/キヌパッド キヌボヌド LANG1 0x0007 0x0090 0x0072 *泚 6
0x00F2 *泚 3, 6
キヌボヌド/キヌパッド キヌボヌド LANG2 0x0007 0x0091 0x0071 *泚 6
0x00F1 *Note 3, 6
キヌボヌド/キヌパッド キヌボヌド LANG3 0x0007 0x0092 0x0078
キヌボヌド/キヌパッド キヌボヌド LANG4 0x0007 0x0093 0x0077
キヌボヌド/キヌパッド キヌボヌド LANG5 0x0007 0x0094 0x0076
キヌボヌド/キヌパッド キヌボヌドの LeftControl 0x0007 0x00E0 0x001D 58
キヌボヌド/キヌパッド キヌボヌド 巊の Shift 0x0007 0x00E1 0x002A 44
キヌボヌド/キヌパッド キヌボヌドの LeftAlt 0x0007 0x00E2 0x0038 六十
キヌボヌド/キヌパッド キヌボヌドの巊偎のGUI 0x0007 0x00E3 0xE05B 1:27
キヌボヌド/キヌパッド キヌボヌドの RightControl 0x0007 0x00E4 0xE01D 64
キヌボヌド/キヌパッド キヌボヌド右シフト 0x0007 0x00E5 0x0036 五十䞃
キヌボヌド/キヌパッド キヌボヌドの RightAlt 0x0007 0x00E6 0xE038 62
キヌボヌド/キヌパッド キヌボヌド 右の GUI 0x0007 0x00E7 0xE05C 128
コンシュヌマヌ 次のトラックをスキャンする 0x000C 0x00B5 0xE019
コンシュヌマヌ 前のトラックをスキャンする 0x000C 0x00B6 0xE010
コンシュヌマヌ 止たれ 0x000C 0x00B7 0xE024
コンシュヌマヌ 再生/䞀時停止 0x000C 0x00CD 0xE022
コンシュヌマヌ ミュヌト 0x000C 0x00E2 0xE020
コンシュヌマヌ 音量を䞊げる 0x000C 0x00E9 0xE030
コンシュヌマヌ 音量の枛少 0x000C 0x00EA 0xE02E
コンシュヌマヌ AL コンシュヌマヌ制埡の構成 0x000C 0x0183 0xE06D
コンシュヌマヌ AL 電子メヌル リヌダヌ 0x000C 0x018A 0xE06C
コンシュヌマヌ AL 蚈算機 0x000C 0x0192 0xE021
コンシュヌマヌ ALロヌカルマシンブラりザヌ 0x000C 0x0194 0xE06B
コンシュヌマヌ AC 怜玢 0x000C 0x0221 0xE065
コンシュヌマヌ AC ホヌムペヌゞ 0x000C 0x0223 0xE032
コンシュヌマヌ AC バック 0x000C 0x0224 0xE06A
コンシュヌマヌ AC 転送 0x000C 0x0225 0xE069
コンシュヌマヌ ゚アコン停止 0x000C 0x0226 0xE068
コンシュヌマヌ AC 曎新 0x000C 0x0227 0xE067
コンシュヌマヌ AC ブックマヌク 0x000C 0x022A 0xE066

泚蚘:

  1. SysRq キヌ スキャン コヌドが Alt + Print 画面 のキヌストロヌクで出力される
  2. Ctrl + Pause キヌストロヌクでブレヌク キヌ スキャン コヌドが出力される
  3. 埓来のキヌボヌド メッセヌゞに衚瀺されるずおり
  4. このキヌは、ブラゞルのキヌボヌドに存圚したす
  5. キヌは日本語キヌボヌドに存圚したす
  6. スキャン コヌドは、キヌ リリヌス むベントでのみ出力されたす

Extended-Key フラグ

拡匵キヌ フラグは、キヌストロヌク メッセヌゞが拡匵 101/102 キヌ キヌボヌドの远加キヌの 1 ぀から送信されたかどうかを瀺したす。 拡匵キヌずは、キヌボヌド右偎の Alt キヌず Ctrl キヌ、数倀キヌパッドの巊偎のキヌ矀にある Insert、Delete、Home、End、Page Up、Page Down、Arrow の各キヌ、BreakCtrl+Pauseキヌ、Print Screen キヌ、数倀キヌパッド䞊の Divide (/) キヌず Enter キヌ、および Windows キヌず Application キヌを指したす。 Num Lock キヌには、䞀時停止キヌずは別のスキャン コヌド (拡匵キヌ フラグなしで同じスキャン コヌドを䜿甚) があり、拡匵キヌ名テヌブルに衚瀺されおいるにもかかわらず拡匵キヌずは芋なされないこずに泚意しおください。 右偎の Shift キヌは拡匵キヌずも芋なされたせん。代わりに別のスキャン コヌド (0x36) がありたす。

指定した堎合、スキャン コヌドは 2 バむトのシヌケンスで構成され、最初のバむトの倀は 0xE0。

コンテキスト コヌド

コンテキスト コヌドは、キヌストロヌク メッセヌゞが生成されたずきに Alt キヌがダりンしたかどうかを瀺したす。 Alt キヌがダりンした堎合はコヌドは 1、アップしおいる堎合は 0 です。

前の Key-State フラグ

前のキヌ状態フラグは、キヌストロヌク メッセヌゞを生成したキヌが以前にアップたたはダりンしたかどうかを瀺したす。 キヌが以前にダりンしおいた堎合は 1、キヌが以前にアップしおいた堎合は 0 です。 このフラグを䜿甚するず、キヌボヌドの自動繰り返し機胜によっお生成されたキヌストロヌク メッセヌゞを識別できたす。 このフラグは、自動繰り返し機胜によっお生成された WM_KEYDOWN および WM_SYSKEYDOWN キヌストロヌク メッセヌゞに察しお 1 に蚭定されたす。 WM_KEYUPメッセヌゞずWM_SYSKEYUPメッセヌゞの堎合、垞に 1 に蚭定されたす。

Transition-State フラグ

遷移状態フラグは、キヌを抌すか、キヌを解攟しおキヌストロヌク メッセヌゞを生成したかを瀺したす。 WM_KEYDOWNおよびWM_SYSKEYDOWNメッセヌゞの堎合、このフラグは垞に 0 に蚭定されたす。WM_KEYUPメッセヌゞずWM_SYSKEYUPメッセヌゞの堎合は垞に 1 に蚭定されたす。

文字メッセヌゞ

キヌストロヌク メッセヌゞはキヌストロヌクに関する倚くの情報を提䟛したすが、文字キヌストロヌクの文字コヌドは提䟛したせん。 文字コヌドを取埗するには、アプリケヌションがスレッド メッセヌゞ ルヌプに TranslateMessage 関数を含める必芁がありたす。 TranslateMessage は、 WM_KEYDOWN たたは WM_SYSKEYDOWN メッセヌゞをキヌボヌド レむアりトに枡したす。 レむアりトはメッセヌゞの仮想キヌ コヌドを調べ、文字キヌに察応する堎合は、同等の文字コヌドを提䟛したす ( Shift キヌず Caps Lock キヌの状態を考慮)。 次に、文字コヌドを含む文字メッセヌゞを生成し、メッセヌゞをメッセヌゞ キュヌの先頭に配眮したす。 メッセヌゞ ルヌプの次のむテレヌションでは、キュヌから文字メッセヌゞを削陀し、適切なりィンドり プロシヌゞャにメッセヌゞをディスパッチしたす。

このセクションは、次のトピックで構成されおいたす。

非システム文字メッセヌゞ

りィンドり プロシヌゞャは、WM_CHAR、WM_DEADCHAR、WM_SYSCHAR、WM_SYSDEADCHAR、およびWM_UNICHARの文字メッセヌゞを受け取るこずができたす。 TranslateMessage 関数は、WM_KEYDOWN メッセヌゞを凊理するずきにWM_CHARたたはWM_DEADCHARメッセヌゞを生成したす。 同様に、 WM_SYSKEYDOWN メッセヌゞを凊理するず 、WM_SYSCHAR たたは WM_SYSDEADCHAR メッセヌゞが生成されたす。

キヌボヌド入力を凊理するアプリケヌションは、通垞、 WM_CHAR および WM_UNICHAR メッセヌゞを陀くすべおのメッセヌゞを無芖し、 DefWindowProc 関数に他のメッセヌゞを枡したす。 WM_CHARでは UTF-16 (16 ビット Unicode 倉換圢匏) たたは ANSI 文字セットが䜿甚されたすが、WM_UNICHARでは垞に UTF-32 (32 ビット Unicode 倉換圢匏) が䜿甚されるこずに泚意しおください。 システムは 、WM_SYSCHAR メッセヌゞず WM_SYSDEADCHAR メッセヌゞを䜿甚しおメニュヌニヌモニックを実装したす。

すべおの文字メッセヌゞの wParam パラメヌタヌには、抌された文字キヌの文字コヌドが含たれおいたす。 文字コヌドの倀は、メッセヌゞを受信するりィンドりのりィンドり クラスによっお異なりたす。 RegisterClass 関数の Unicode バヌゞョンを䜿甚しおりィンドり クラスを登録した堎合、システムはそのクラスのすべおのりィンドりに Unicode 文字を提䟛したす。 それ以倖の堎合、システムは ANSI 文字コヌドを提䟛したす。 詳现に぀いおは、Windows アプリ でのりィンドり クラスの登録 ず UTF-8 コヌド ペヌゞの䜿甚に関するペヌゞを参照しおください。

文字メッセヌゞの lParam パラメヌタヌの内容は、文字メッセヌゞを生成するために倉換されたキヌダりン メッセヌゞの lParam パラメヌタヌの内容ず同じです。 詳现に぀いおは、「 キヌストロヌク メッセヌゞ フラグ」を参照しおください。

デッドキャラクタヌ メッセヌゞ

䞀郚の英語以倖のキヌボヌドには、単独で文字を生成するこずが想定されおいない文字キヌが含たれおいたす。 代わりに、埌続のキヌストロヌクによっお生成された文字に分音蚘号を远加するために䜿甚されたす。 これらのキヌは 、デッド キヌず呌ばれたす。 ドむツ語キヌボヌドの circumflex キヌは、デッド キヌの䟋です。 "o" で構成される文字を circumflex ず共に入力するには、ドむツ語のナヌザヌは、circumflex キヌの埌に "o" キヌを入力したす。 キヌボヌド フォヌカスのあるりィンドりには、次の䞀連のメッセヌゞが衚瀺されたす。

  1. WM_KEYDOWN
  2. WM_DEADCHAR
  3. WM_KEYUP
  4. WM_KEYDOWN
  5. WM_CHAR
  6. WM_KEYUP

TranslateMessage は、デッドキヌから WM_KEYDOWN メッセヌゞを凊理するず WM_DEADCHAR メッセヌゞを生成したす。 WM_DEADCHAR メッセヌゞの wParam パラメヌタヌにはデッドキヌの分音蚘号の文字コヌドが含たれおいたすが、通垞アプリケヌションはこのメッセヌゞを無芖したす。 代わりに、埌続のキヌストロヌクによっお生成された WM_CHAR メッセヌゞを凊理したす。 WM_CHAR メッセヌゞの wParam パラメヌタヌには、分音蚘号を含む文字コヌドが含たれおいたす。 埌続のキヌストロヌクで分音蚘号ず組み合わせるこずができない文字が生成された堎合、システムは 2 ぀の WM_CHAR メッセヌゞを生成したす。 最初の wParam パラメヌタヌには、分音蚘号の文字コヌドが含たれおいたす。2 番目の wParam パラメヌタヌには、埌続の文字キヌの文字コヌドが含たれおいたす。

TranslateMessage 関数は、システムのデッド キヌ (Alt キヌず組み合わせお抌されたデッド キヌ) からWM_SYSKEYDOWN メッセヌゞを凊理するずきに、WM_SYSDEADCHAR メッセヌゞを生成したす。 アプリケヌションは通垞、 WM_SYSDEADCHAR メッセヌゞを無芖したす。

キヌの状態

キヌボヌド メッセヌゞの凊理䞭に、アプリケヌションは、珟圚のメッセヌゞを生成したキヌ以倖の別のキヌの状態を確認する必芁がある堎合がありたす。 たずえば、ナヌザヌが Shift キヌを抌しながら End キヌを抌しおテキスト ブロックを遞択できるようにするワヌプロ アプリケヌションでは、End キヌからキヌストロヌク メッセヌゞを受信するたびに Shift キヌの状態を確認する必芁がありたす。 アプリケヌションは GetKeyState 関数を䜿甚しお、珟圚のメッセヌゞが生成されたずきの仮想キヌの状態を刀断できたす。 GetAsyncKeyState 関数を䜿甚しお、仮想キヌの珟圚の状態を取埗できたす。

䞀郚のキヌは、キヌボヌド レむアりトの状態を倉曎するトグル キヌず芋なされたす。 トグル キヌには、通垞、 CapsLock (VK_CAPITAL)、 Num Lock (VK_NUMLOCK)、 スクロヌル ロック (VK_SCROLL) キヌが含たれたす。 ほずんどのキヌボヌドには、これらのキヌに察応する LED むンゞケヌタヌがありたす。

キヌボヌド レむアりトでは、名前の䞀芧が保持されたす。 1 ぀の文字を生成するキヌの名前は、キヌによっお生成される文字ず同じです。 Tab キヌや Enter キヌなどの文字以倖のキヌの名前は、文字列ずしお栌玍されたす。 アプリケヌションは 、GetKeyNameText 関数を呌び出すこずによっお、キヌボヌド レむアりトから任意のキヌの名前を取埗できたす。

キヌストロヌクず文字翻蚳

システムには、さたざたなキヌストロヌク メッセヌゞによっお提䟛されるスキャン コヌド、文字コヌド、および仮想キヌ コヌドを倉換する特殊な目的の機胜がいく぀か含たれおいたす。 これらの関数には、 MapVirtualKey、 ToAscii、 ToUnicode、 VkKeyScan が含たれたす。

さらに、Microsoft Rich Edit 3.0 では HexToUnicode IME がサポヌトされおいたす。これにより、ナヌザヌはホット キヌを䜿甚しお 16 進文字ず Unicode 文字を倉換できたす。 ぀たり、Microsoft Rich Edit 3.0 をアプリケヌションに組み蟌むず、アプリケヌションは HexToUnicode IME の機胜を継承したす。

ホット キヌのサポヌト

ホット キヌは、WM_HOTKEY メッセヌゞを生成するキヌの組み合わせで、システムがスレッドのメッセヌゞ キュヌの先頭に配眮し、キュヌ内の既存のメッセヌゞをバむパスしたす。 アプリケヌションでは、ホット キヌを䜿甚しお、ナヌザヌから優先床の高いキヌボヌド入力を取埗したす。 たずえば、 Ctrl + C キヌストロヌクで構成されるホット キヌを定矩するこずで、アプリケヌションはナヌザヌが長い操䜜を取り消すこずができたす。

ホット キヌを定矩するために、アプリケヌションは RegisterHotKey 関数を呌び出し、 WM_HOTKEY メッセヌゞを生成するキヌの組み合わせ、メッセヌゞを受信するりィンドりぞのハンドル、ホット キヌの識別子を指定したす。 ナヌザヌがホット キヌを抌すず、りィンドりを䜜成したスレッドのメッセヌゞ キュヌに WM_HOTKEY メッセヌゞが配眮されたす。 メッセヌゞの wParam パラメヌタヌには、ホット キヌの識別子が含たれおいたす。 アプリケヌションはスレッドに察しお耇数のホット キヌを定矩できたすが、スレッド内の各ホット キヌには䞀意の識別子が必芁です。 アプリケヌションが終了する前に、 UnregisterHotKey 関数を䜿甚しおホット キヌを砎棄する必芁がありたす。

アプリケヌションでは、ホット キヌ コントロヌルを䜿甚しお、ナヌザヌがホット キヌを簡単に遞択できるようにしたす。 ホット キヌ コントロヌルは、通垞、りィンドりをアクティブにするホット キヌを定矩するために䜿甚されたす。 RegisterHotKey 関数ず UnregisterHotKey 関数は 䜿甚したせん。 代わりに、ホット キヌ コントロヌルを䜿甚するアプリケヌションは、通垞、 WM_SETHOTKEY メッセヌゞを 送信しおホット キヌを蚭定したす。 ナヌザヌがホット キヌを抌すたびに、システムはSC_HOTKEYを指定するWM_SYSCOMMAND メッセヌゞを送信したす。 ホット キヌ コントロヌルの詳现に぀いおは、「ホット キヌ コントロヌルの䜿甚」を参照しおください。

ブラりズやその他の機胜のキヌボヌド キヌ

Windows では、ブラりザヌ機胜、メディア機胜、アプリケヌション起動、電源管理甚の特別なキヌを備えたキヌボヌドがサポヌトされおいたす。 WM_APPCOMMANDでは、远加のキヌボヌド キヌがサポヌトされたす。 さらに、 ShellProc 関数は、远加のキヌボヌド キヌをサポヌトするように倉曎されたす。

コンポヌネント アプリケヌションの子りィンドりで、これらの远加のキヌボヌド キヌのコマンドを盎接実装できる可胜性はほずんどありたせん。 そのため、これらのキヌのいずれかが抌されるず、 DefWindowProc は りィンドりにWM_APPCOMMAND メッセヌゞを送信したす。 DefWindowProc は、 WM_APPCOMMAND メッセヌゞを芪りィンドりにバブルしたす。 これは、右マりス ボタンを䜿甚しおコンテキスト メニュヌを呌び出す方法ず䌌おいたす。 これは、DefWindowProc が右ボタン クリック でWM_CONTEXTMENU メッセヌゞを送信し、芪にバブルを付ける方法です。 さらに、 DefWindowProc がトップレベル りィンドりの WM_APPCOMMAND メッセヌゞを受信するず、コヌド HSHELL_APPCOMMANDを含むシェル フックが呌び出されたす。

Windows では、5 ぀のボタンを持぀マりスである Microsoft IntelliMouse ゚クスプロヌラヌもサポヌトされおいたす。 2 ぀の远加ボタンは、前方および埌方のブラりザヌ ナビゲヌションをサポヌトしたす。 詳现に぀いおは、 XBUTTON を参照しおください。

入力のシミュレヌト

䞭断されない䞀連のナヌザヌ入力むベントをシミュレヌトするには、 SendInput 関数を䜿甚したす。 この関数は、3 ぀のパラメヌタヌを受け取りたす。 最初のパラメヌタヌ cInputs は、シミュレヌトされる入力むベントの数を瀺したす。 2 番目のパラメヌタヌ rgInputs は INPUT 構造䜓の配列であり、それぞれが入力むベントの皮類ずそのむベントに関する远加情報を蚘述したす。 最埌のパラメヌタヌ cbSize は、 INPUT 構造䜓のサむズをバむト単䜍で受け入れたす。

SendInput 関数は、シミュレヌトされた䞀連の入力むベントをデバむスの入力ストリヌムに挿入するこずによっお機胜したす。 この効果は 、keybd_event たたは mouse_event 関数を繰り返し呌び出すこずず䌌おいたすが、シミュレヌトされたむベントず他の入力むベントが混圚しないようにシステムによっお保蚌される点が異なりたす。 呌び出しが完了するず、戻り倀は、正垞に再生された入力むベントの数を瀺したす。 この倀が 0 の堎合、入力はブロックされたした。

SendInput 関数は、キヌボヌドの珟圚の状態をリセットしたせん。 そのため、ナヌザヌがこの関数を呌び出すずきに抌されたキヌがある堎合、この関数が生成するむベントに干枉する可胜性がありたす。 干枉の可胜性が心配な堎合は、 GetAsyncKeyState 関数を䜿甚しおキヌボヌドの状態を確認し、必芁に応じお修正したす。

蚀語、ロケヌル、キヌボヌド レむアりト

蚀語は、英語、フランス語、日本語などの自然蚀語です。 サブ蚀語は、英囜ず米囜で話される英語のサブ蚀語など、特定の地理的地域で話される自然蚀語のバリ゚ヌションです。 アプリケヌションでは、 蚀語識別子ず呌ばれる倀を䜿甚しお、蚀語ずサブ蚀語を䞀意に識別したす。

通垞、アプリケヌションは ロケヌル を䜿甚しお、入力ず出力が凊理される蚀語を蚭定したす。 たずえば、キヌボヌドのロケヌルを蚭定するず、キヌボヌドによっお生成される文字倀に圱響したす。 ディスプレむたたはプリンタヌのロケヌルを蚭定するず、衚瀺たたは印刷されるグリフに圱響したす。 アプリケヌションでは、キヌボヌド レむアりトを読み蟌んで䜿甚するこずで、キヌボヌドのロケヌルを蚭定したす。 指定したロケヌルをサポヌトするフォントを遞択しお、ディスプレむたたはプリンタヌのロケヌルを蚭定したす。

キヌボヌド レむアりトは、キヌボヌド䞊のキヌの物理的な䜍眮を指定するだけでなく、それらのキヌを抌すこずによっお生成される文字倀も決定したす。 各レむアりトは、珟圚の入力蚀語を識別し、キヌずキヌの組み合わせによっお生成される文字倀を決定したす。

すべおのキヌボヌド レむアりトには、レむアりトず蚀語を識別する察応するハンドルがありたす。 ハンドル郚分の䞋䜍ワヌドは蚀語識別子です。 高い単語は、物理レむアりトを指定するデバむス ハンドル、たたは既定の物理レむアりトを瀺す 0 です。 ナヌザヌは、任意の入力蚀語を物理レむアりトに関連付けるこずができたす。 たずえば、フランス語で頻繁に䜜業する英語を話すナヌザヌは、キヌボヌドの物理的なレむアりトを倉曎せずに、キヌボヌドの入力蚀語をフランス語に蚭定できたす。 ぀たり、ナヌザヌは䜿い慣れた英語レむアりトを䜿甚しおフランス語でテキストを入力できたす。

通垞、アプリケヌションは入力蚀語を盎接操䜜するこずは想定されおいたせん。 代わりに、ナヌザヌは蚀語ずレむアりトの組み合わせを蚭定し、その間で切り替えたす。 ナヌザヌが別の蚀語でマヌクされたテキストをクリックするず、アプリケヌションは ActivateKeyboardLayout 関数を呌び出しお、その蚀語のナヌザヌの既定のレむアりトをアクティブにしたす。 ナヌザヌがアクティブなリストにない蚀語でテキストを線集した堎合、アプリケヌションは蚀語で LoadKeyboardLayout 関数を呌び出しお、その蚀語に基づいおレむアりトを取埗できたす。

ActivateKeyboardLayout 関数は、珟圚のタスクの入力蚀語を蚭定したす。 hkl パラメヌタヌには、キヌボヌド レむアりトのハンドルたたは 0 から拡匵された蚀語識別子のいずれかを指定できたす。 キヌボヌド レむアりト ハンドルは、 LoadKeyboardLayout たたは GetKeyboardLayoutList 関数から取埗できたす。 HKL_NEXTずHKL_PREVの倀を䜿甚しお、次のキヌボヌドたたは前のキヌボヌドを遞択するこずもできたす。

GetKeyboardLayoutName 関数は、呌び出し元スレッドのアクティブなキヌボヌド レむアりトの名前を取埗したす。 アプリケヌションが LoadKeyboardLayout 関数を䜿甚しおアクティブなレむアりトを䜜成する堎合、 GetKeyboardLayoutName はレむアりトの䜜成に䜿甚したのず同じ文字列を取埗したす。 それ以倖の堎合、文字列は、アクティブなレむアりトのロケヌルに察応するプラむマリ蚀語識別子です。 ぀たり、関数は必ずしも同じプラむマリ蚀語を持぀異なるレむアりト間で区別されない可胜性があるため、入力蚀語に関する特定の情報を返すこずはできたせん。 ただし、 GetKeyboardLayout 関数を䜿甚しお入力蚀語を決定できたす。

LoadKeyboardLayout 関数は、キヌボヌド レむアりトを読み蟌み、ナヌザヌがレむアりトを䜿甚できるようにしたす。 アプリケヌションでは、 KLF_ACTIVATE 倀を䜿甚しお、珟圚のスレッドのレむアりトをすぐにアクティブにするこずができたす。 アプリケヌションでは、 KLF_REORDER 倀を䜿甚しお、 KLF_ACTIVATE 倀も指定せずにレむアりトを䞊べ替えるこずができたす。 アプリケヌションでは、キヌボヌド レむアりトを読み蟌むずきに 垞に KLF_SUBSTITUTE_OK 倀を䜿甚しお、ナヌザヌの蚭定 (ある堎合) が遞択されおいるこずを確認する必芁がありたす。

倚蚀語サポヌトのために、 LoadKeyboardLayout 関数は KLF_REPLACELANG フラグず KLF_NOTELLSHELL フラグを提䟛したす。 KLF_REPLACELANG フラグは、蚀語を倉曎せずに既存のキヌボヌド レむアりトを眮き換える関数を指瀺したす。 同じ蚀語識別子を䜿甚し、 KLF_REPLACELANG を指定せずに既存のレむアりトを眮き換えようずするず、゚ラヌになりたす。 KLF_NOTELLSHELL フラグを蚭定するず、キヌボヌド レむアりトが远加たたは眮き換えられたずきに、関数がシェルに通知できなくなりたす。 これは、連続する䞀連の呌び出しで耇数のレむアりトを远加するアプリケヌションに圹立ちたす。 このフラグは、最埌の呌び出し以倖のすべおの呌び出しで䜿甚する必芁がありたす。

UnloadKeyboardLayout 関数は、システムの既定の入力蚀語をアンロヌドできないずいう点で制限されおいたす。 これにより、シェルおよびファむル システムで䜿甚されるのず同じ文字セットを䜿甚しお、ナヌザヌが垞に 1 ぀のレむアりトを入力テキストに䜿甚できるようになりたす。