我正在尝试用 C# 开发一个应用程序,它需要检测用户选择的语言(键盘布局)。 但是我的计算机上安装了两种语言,代码总是返回默认的一种,即使我在运行应用程序之前更改了语言。
InputLanguage myCurrentLanguage = InputLanguage.InstalledInputLanguages[1]; // here I can see collection of languages
InputLanguage myCurrentLanguage2 = InputLanguage.CurrentInputLanguage; // always return first or default one
是否有任何技术来检测真正选择/运行的语言?
最佳答案
命名空间 System.Threading
中的
Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName
返回您所说的默认文化,与键盘布局无关。 IE。在我的计算机上,这会返回 "de"
,这是我用于日期和数字格式设置的区域性。但是,我使用的是 US-ASCII 键盘,.Culture.Name
和 .LayoutName
来自 System.Windows.Forms.InputLanguage.CurrentInputLanguage
返回“en-US”
和 “US”
。
Thread.CurrentThread.CurrentCulture
提供了很多附加信息,例如 KeyboardLayoutId
、DisplayName
(本地化文化名称)、EnglishName
、DateTimeFormat
等。
我做了一些测试并注意到了一个奇怪的行为。我显示了 Windows 语言栏并选择了辅助输入语言。但是每当我启动一个小的测试 WinForms 应用程序时,输入语言会自动切换回默认语言。应用程序启动后,我将输入语言切换回第二语言。现在就停留在这个。
在这两种情况下,这都为我提供了正确的输入语言(显示在语言栏上的语言):
lblInputLanguage.Text = InputLanguage.CurrentInputLanguage.Culture.Name;
lblKeyboardLayout.Text = InputLanguage.CurrentInputLanguage.LayoutName;
super 用户的这个帖子可能会阐明这个问题:How to avoid keyboard layout automatically changing on windows
关于c# - 在多语言计算机中检测当前键盘语言/布局名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27747176/