注:入力言語とキーボードレイアウトは同じではありません。 1つの入力言語は複数のレイアウトを持つことができます(例:米国英語とDvorak、Dvorak Left、およびDvorak Right)。C# - 入力言語のキーボードレイアウトの変更(例:ギリシャ語の下でギリシャ語(319)を設定)
私は、Windows 7のほぼすべてのキーボードレイアウトをテストするためのプログラムを作成しています。私のプログラムでは入力言語を変更できましたが、入力言語に複数のレイアウトがある場合デフォルトのものに変更してください。これは、米国英語(複数のDvorakレイアウト)、ギリシャ語(ギリシャ語220、ギリシャ語319、ギリシア語ポリトニックなど)の問題です。
私は現在、入力言語を変更するために使用していたコードは次のとおりです。
string cultureChange = "{en-US}"; //just an example
InputLanguage nextLang = InputLanguage.FromCulture(cultureChange);
ChangeInputLanguage(nextLang);
public void ChangeInputLanguage(InputLanguage InputLang)
{
// Check is this Language really installed. Raise exception to warn if it is not:
if (InputLanguage.InstalledInputLanguages.IndexOf(InputLang) == -1)
throw new ArgumentOutOfRangeException();
// InputLanguage changes here:
InputLanguage.CurrentInputLanguage = InputLang;
}
入力言語は文化、LayoutNameを持っている、とプロパティを処理します。問題は、同じ入力言語(例えば、Dvorakとデフォルトの米国英語)のレイアウトの間に、同じCulture情報(LCIDとKeyboardLayoutIDはどちらも1033です)が異なるが、LayoutNameとHandlesが異なることです。しかし、アプリケーションの言語を変更する唯一の方法は、私が知る限り、Cultureを使用することです。
Handleプロパティが意味のある値を持つ数少ないケースの1つです。それを16進数に変換するとパターンが表示され、下位と上位の両方にデフォルトレイアウトのLCIDが含まれます。だから米国のための0x04090409。 –