我正在尝试在C#中开发一个需要检测用户所选语言(键盘布局)的应用程序。 但是我的计算机上安装了两种语言,代码总是返回默认语言,即使我在运行应用程序之前更改了语言。
InputLanguage myCurrentLanguage = InputLanguage.InstalledInputLanguages[1]; // here I can see collection of languages
InputLanguage myCurrentLanguage2 = InputLanguage.CurrentInputLanguage; // always return first or default one
是否有任何技术可以检测真实的选定/运行语言?
答案 0 :(得分:7)
Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName
中的 System.Threading
返回您称为默认文化的内容,与键盘布局无关。即在我的计算机上,它返回"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;
超级用户上的这个主题可能会解决这个问题:How to avoid keyboard layout automatically changing on windows
答案 1 :(得分:3)
这个返回当前处于活动状态的输入语言(当前是键盘类型的输入语言):
InputLanguage myCurrentLang = InputLanguage.CurrentInputLanguage;
答案 2 :(得分:1)
答案 3 :(得分:0)
对于WPF(而不是Windows窗体),有System.Windows.Input.InputLanguageManager,其中包含InputLanguageManager.Current.AvailableInputLanguages
和InputLanguageManager.Current.CurrentInputLanguage
等。
答案 4 :(得分:0)
您必须取消选中let me set a different input method for each app window
下的Settings/Devices/Typing/Advanced Keyboard
string lang = InputLanguage.CurrentInputLanguage.Culture.Name;
上班。如果这样做,即使它与默认的键盘语言不同,它也会返回您用于键入的当前语言布局。
答案 5 :(得分:0)
foreach (InputLanguage lang in InputLanguage.InstalledInputLanguages)
{
if (lang.Culture.TwoLetterISOLanguageName != StrCurrentLang )
{
InputLanguage.CurrentInputLanguage = lang;
return;
}
}
上一行代码为您提供当前语言的最后两个字母符号
另一方面,您可以使用下段代码来更改当前语言
int zeros[sizeof(yourArray)];
if(memcmp(yourArray,zeros,sizeof(yourArray))==0)
//do things
else
//do things