フォーカスされているプログラムのレイアウトを変更するプログラムを作成します。現在のキーボード レイアウトの ID を取得するコードがあります。
const int KL_NAMELENGTH = 9;
const uint KLF_ACTIVATE = 1;
[DllImport("user32.dll")]
public static extern long LoadKeyboardLayout(string pwszKLID, uint Flags);
[DllImport("user32.dll")]
public static extern long GetKeyboardLayoutName(System.Text.StringBuilder pwszKLID);
public static string getKLName()
{
System.Text.StringBuilder name = new System.Text.StringBuilder(KL_NAMELENGTH);
GetKeyboardLayoutName(name);
return name.ToString();
}
例: EN - "00000409" DE- "00000407" FR- "0000040C"
また、次のコードがあります。
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
private void ChangeLang(String code)
{
PostMessage(GetForegroundWindow(), 0x0050, 2, 0);
}
現在、関数ChangeLangを呼び出すと、プログラムは現在の言語を次の言語に切り替えます。しかし、どのレイアウト スイッチ (コード レイアウトを使用) で、ChangeLang が他のプログラムにメッセージを渡したかを機能させるために必要です。これはどのように行うことができますか?