[英]Switch between multiple keyboard types within a language in C#
我正在为印地语使用印地语 Indic Input 3 语言包。 我需要为此语言提供多个布局选项,但是当我检查已安装的语言类型时,它会为此语言包中的所有布局显示相同的布局 ID。 我的目标是允许用户在我的 WinForms 应用程序的 Mangal - CBI 和 Mangal - GAIL 输入之间切换。 下面是代码:
void ChangeCulture(string culture)
{
original = InputLanguage.CurrentInputLanguage;
var _culture = System.Globalization.CultureInfo.GetCultureInfo(culture);
var _language = InputLanguage.FromCulture(_culture);
if (InputLanguage.InstalledInputLanguages.IndexOf(_language) >= 0)
InputLanguage.CurrentInputLanguage = _language;
else
InputLanguage.CurrentInputLanguage = InputLanguage.DefaultInputLanguage;
}
我还使用这种本机方法使用布局 ID 更改键盘布局。 但问题是所有 Hindi Indic Input 3 布局类型的布局 id 都是相同的。
[DllImport("user32.dll")]
private static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags);
LoadKeyboardLayout("hi-IN", 0xf0c00439);
我找不到有关此语言包的任何文档。 以下是从语言栏中选择它的方式。 我需要 select 这两种 GAIL 和 CBI 类型来自 C# 代码。 请帮忙。
看起来您需要检查input locale identifier
(以前称为键盘布局,HKL)而不是 InputLanguage。 这就是为什么当你有不同的布局时你的语言保持不变(印地语)。 您不需要打包文档,因为安装的“语言”是系统的一部分。
OS Windows 对“InputLanguage”的定义比“键盘布局”更广泛。 它具有所有输入通道,包括“语音到文本”、输入法编辑器 (IME)。 当键盘布局设置时,它也会设置InputLanguage.CurrentInputLanguage
。
所以,是的, user32.dll
是调用 Window 的 C++ 函数的正确方法:
HKL GetKeyboardLayout(
[in] DWORD idThread
);
HKL ActivateKeyboardLayout(
[in] HKL hkl,
[in] UINT Flags
);
试试这个 DLL 的其他功能。 如GetKeyboardLayout
(获取线程的当前布局)、 GetKeyboardLayoutList
(获取所有系统布局)、 ActivateKeyboardLayout
(设置HKL为活动)。
Please, check the gist below from https://github.com/vurdalakov to play with layouts, not languages: https://gist.github.com/vurdalakov/9cea795e82109fdacb7062dcb122b42e
希望,这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.