【发布时间】:2017-05-19 01:34:40
【问题描述】:
注意:输入语言和键盘布局不是一回事。一种输入语言可以有多种布局(例如:美国英语和 Dvorak、Dvorak Left 和 Dvorak Right)。
我正在编写一个程序,该程序将用于测试 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;
}
输入语言具有 Culture、LayoutName 和 Handle 属性。问题在于,相同输入语言(例如 Dvorak 和默认美国英语)的布局之间具有完全相同的文化信息(LCID 和 KeyboardLayoutID 均为 1033),但布局名称和句柄不同。但据我所知,更改应用程序语言的唯一方法是使用文化。
【问题讨论】:
-
Handle 属性具有有意义值的少数情况之一。将其转换为十六进制,您将看到模式,低字和高字都包含默认布局的 LCID。所以美国的 0x04090409。