LoadKeyboardLayoutA 関数 (winuser.h)

新しい入力ロケール識別子 (以前はキーボード レイアウトと呼ばれていました) をシステムに読み込みます。

Windows 8より前: 一度に複数の入力ロケール識別子を読み込むことができますが、一度にアクティブになるのはプロセスごとに 1 つだけです。 複数の入力ロケール識別子を読み込むと、それらの切り替えを迅速に行うことができます。

Windows 8以降: 入力ロケール識別子は、システム全体に対して読み込まれます。 現在のプロセスがキーボード フォーカスを持つウィンドウを所有していない場合、この関数は無効です。

構文

HKL LoadKeyboardLayoutA(
  [in] LPCSTR pwszKLID,
  [in] UINT   Flags
);

パラメーター

[in] pwszKLID

型: LPCTSTR

読み込む入力ロケール識別子の名前。 この名前は、 言語識別子 (低い単語) とデバイス識別子 (高い単語) の 16 進数の値で構成される文字列です。 たとえば、米国英語には0x0409の言語識別子があるため、プライマリの米国英語レイアウトの名前は "00000409" です。 米国英語レイアウトのバリアント (Dvorak レイアウトなど) には、"00010409"、"00020409" という名前が付けられます。

Windows で提供される入力レイアウトの一覧については、「Windows のキーボード識別子と入力メソッド エディター」を参照してください。

[in] Flags

型: UINT

入力ロケール識別子の読み込み方法を指定します。 このパラメーターには、次の 1 つ以上の値を指定できます。

意味
KLF_ACTIVATE
0x00000001
Windows 8より前: 指定した入力ロケール識別子がまだ読み込まれていない場合、関数は現在のスレッドの入力ロケール識別子を読み込んでアクティブ化します。

Windows 8以降: 指定した入力ロケール識別子がまだ読み込まれていない場合、関数はシステムの入力ロケール識別子を読み込んでアクティブ化します。

KLF_NOTELLSHELL
0x00000080
Windows 8より前: 新しい入力ロケール識別子が読み込まれるときに、ShellProc フック プロシージャがHSHELL_LANGUAGEフック コードを受け取らないようにします。 通常、この値は、アプリケーションが複数の入力ロケール識別子を 1 つずつ読み込むときに使用されます。 最後の入力ロケール識別子以外のすべてにこの値を適用すると、すべての入力ロケール識別子が追加されるまでシェルの処理が遅れます。

Windows 8以降: このシナリオでは、システム全体に対して最後の入力ロケール識別子が設定されます。

KLF_REORDER
0x00000008
Windows 8より前: 指定した入力ロケール識別子を入力ロケール識別子リストの先頭に移動し、そのロケール識別子を現在のスレッドのアクティブなロケール識別子にします。 この値は、KLF_ACTIVATEが指定されていない場合でも、入力ロケール識別子リストの順序 変更します。

Windows 8以降: 指定した入力ロケール識別子を入力ロケール識別子リストの先頭に移動し、そのロケール識別子をシステムのアクティブなロケール識別子にします。 この値は、KLF_ACTIVATEが指定されていない場合でも、入力ロケール識別子リストの順序 変更します。

KLF_REPLACELANG
0x00000010
新しい入力ロケール識別子に現在の入力ロケール識別子と同じ言語識別子がある場合、新しい入力ロケール識別子は、その言語の入力ロケール識別子として現在のロケール識別子に置き換えられます。 この値が指定されておらず、入力ロケール識別子が同じ言語識別子を持つ場合、現在の入力ロケール識別子は置き換えられず、関数は NULL を返します。
KLF_SUBSTITUTE_OK
0x00000002
指定した入力ロケール識別子を、ユーザーが優先する別のロケールに置き換える。 システムは、このフラグが設定された状態で開始されるため、アプリケーションでは常にこのフラグを使用することをお勧めします。 置換は、 レジストリ キーHKEY_CURRENT_USER\Keyboard Layout\Substitutes 明示的に置換ロケールを定義している場合にのみ発生します。 たとえば、キーに値 "00010409" の値名 "00000409" が含まれている場合、US レイアウト ("00000409") を読み込むと、代わりに United States-Dvorak レイアウト ("00010409") が読み込まれます。 システムは起動時 にKLF_SUBSTITUTE_OK を使用するため、すべてのアプリケーションで入力ロケール識別子を読み込むときにこの値を使用して、ユーザーの設定が選択されていることを確認することをお勧めします。
KLF_SETFORPROCESS
0x00000100
Windows 8より前: このフラグは、KLF_ACTIVATEでのみ有効です。 プロセス全体に対して指定された入力ロケール識別子をアクティブ化し、 WM_INPUTLANGCHANGE メッセージを現在のスレッドの [フォーカス] ウィンドウまたは [アクティブ] ウィンドウに送信します。 通常、 LoadKeyboardLayout は現在のスレッドに対してのみ入力ロケール識別子をアクティブにします。

Windows 8以降: このフラグは使用されません。 現在のプロセスがキーボード フォーカスを持つウィンドウを所有している場合、LoadKeyboardLayout は常にシステム全体の入力ロケール識別子をアクティブにします。

KLF_UNLOADPREVIOUS
このフラグはサポートされていません。 代わりに UnloadKeyboardLayout 関数を使用してください。

戻り値

種類: HKL

関数が成功した場合、戻り値は pwszKLID で指定された名前に対応する入力ロケール識別子です。 一致するロケールが使用できない場合、戻り値はシステムの既定の言語です。

関数が失敗した場合は、返される値は NULL です。 これは、レイアウト ライブラリがアプリケーション ディレクトリから読み込まれる場合に発生する可能性があります。

詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

入力ロケール識別子は、音声テキスト変換、Input Method エディター (IME)、またはその他の形式の入力も含めることができるため、キーボード レイアウトよりも広範な概念です。

アプリケーションは、通常、言語の既定の入力ロケール識別子または IME を読み込むことができます。これを行うには、言語識別子の文字列バージョンのみを指定します。 アプリケーションが特定のロケールまたは IME を読み込みたい場合は、レジストリを読み取って、 LoadKeyboardLayout に渡す特定の入力ロケール識別子を決定する必要があります。 この場合、ロケールの既定の入力ロケール識別子をアクティブ化する要求では、最初に一致するものがアクティブになります。 GetKeyboardLayout または LoadKeyboardLayout から返される明示的な入力ロケール識別子を使用して、特定の IME アクティブ化する必要があります。

Windows 8より前: この関数は、現在のプロセスまたはスレッドのレイアウトにのみ影響します。

Windows 8以降: この関数は、システム全体のレイアウトに影響します。

注意

winuser.h ヘッダーは、LoadKeyboardLayout をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winuser.h (Windows.h を含む)
Library User32.lib
[DLL] User32.dll

こちらもご覧ください

ActivateKeyboardLayout

概念

GetKeyboardLayoutName

キーボード入力

MAKELANGID

その他のリソース

リファレンス

UnloadKeyboardLayout