Примечание. Языки ввода и раскладки клавиатуры - это не одно и то же. Один язык ввода может иметь несколько макетов (например, американский английский и Дворжак, Дворак слева и Дворжак справа).C# - Изменение языка ввода. Разметка клавиатуры (пример: установка греческого языка (319) под греческий язык)
Я пишу программу, которая будет использоваться для тестирования почти каждой раскладки клавиатуры в Windows 7. Я успешно смог изменить язык ввода в моей программе, но если на языке ввода есть несколько макетов, я могу только измените значение по умолчанию. Это проблема для английского языка США (несколько макетов Dvorak), греческий (включает в себя греческий 220, греческий 319, греческий Polytonic и т. Д.).
Код настоящее время я использую для изменения входных языков:
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, и обрабатывать свойства. Проблема заключается в том, что между макетами одного и того же входного языка (ex Dvorak и по умолчанию US English) оба имеют точно такую же информацию о культуре (LCID и KeyboardLayoutID - 1033 для обоих), но разные LayoutNames и Handles. Насколько мне известно, единственный способ изменить язык приложения - использовать Культуру.
Один из немногих случаев, когда свойство Handle имеет значимое значение. Преобразуйте его в шестнадцатеричный, и вы увидите шаблон, низкое и высокое слово содержат LCID для макета по умолчанию. Итак, 0x04090409 для США. –