Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName
在命名空间System.Threading
返回所谓的默认文化,并且与键盘布局无关。即在我的电脑上,这返回"de"
,我用于日期和数字格式的文化。但是,我正在使用US-ASCII键盘,并且System.Windows.Forms.InputLanguage.CurrentInputLanguage
分别使用.Culture.Name
和.LayoutName
返回"en-US"
和"US"
。
Thread.CurrentThread.CurrentCulture
给出了很多的更多信息,例如KeyboardLayoutId
,DisplayName
(本地化文化名),EnglishName
,DateTimeFormat
多。
我做了一些测试,发现了一个奇怪的行为。我显示了Windows语言栏并选择了辅助输入语言。但是,无论何时我开始一个测试-WinForms应用程序,输入语言都会自动切换回默认语言。一旦应用程序启动,我将输入语言切换回次要语言。现在它留在这一个。
在这两种情况下,这给了我正确的输入语言(在语言栏上显示的一个):
lblInputLanguage.Text = InputLanguage.CurrentInputLanguage.Culture.Name;
lblKeyboardLayout.Text = InputLanguage.CurrentInputLanguage.LayoutName;
上的超级用户这线程可能会揭示问题的一些轻:How to avoid keyboard layout automatically changing on windows
只需注意,如果使用t更改输入,他语言栏,而不是系统默认语言(似乎不工作,但Windows 8语言控制面板混淆,所以我可能没有设置正确) – Rhumborl