c# - 在多语言计算机中检测当前键盘语言/布局名称

标签 c#

我正在尝试用 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 提供了很多附加信息,例如 KeyboardLayoutIdDisplayName(本地化文化名称)、EnglishNameDateTimeFormat 等。


我做了一些测试并注意到了一个奇怪的行为。我显示了 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/

相关文章:

c# - SignalR hub 中的事件处理程序

c# - 发送两个数据包(一个有长度,一个有数据)或发送一个连接的数据包?

c# - Unity异常: Transform child out of bounds

c# - 从 c# 运行仅签名的 powershell 脚本

c# - 就地修改 XML 文件?

c# - 使用 XSLT 和 C# 在 Tridion 中学习模板的源代码

c# - XML 绑定(bind)到 WPF 中的 DataGrid

c# - 是否有将对象转换为小数的单行方法?

c# - 在 C# 中格式化 double

c# - 通过解码 "*.itemdata-ms"二进制数据文件自定义Windows 8.1 StartScreen (Windows 8.1, StartScreen, C#)