首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#语言中的多个键盘类型之间切换

在C#语言中的多个键盘类型之间切换
EN

Stack Overflow用户
提问于 2022-01-08 13:16:44
回答 1查看 358关注 0票数 2

我使用印地语印度语输入3语言包为印地语。我需要为这种语言提供多个布局选项,但是当我检查已安装的语言类型时,它会为这个语言包中的所有布局显示相同的布局Id。我的目标是允许用户在来自我的WinForms应用程序的Mangal和Mangal输入之间切换。以下是代码:

代码语言:javascript
复制
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更改键盘布局。但问题是,对于所有印地语、印度语输入、3种布局类型,布局id都是相同的,

代码语言:javascript
复制
[DllImport("user32.dll")]
private static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags);
LoadKeyboardLayout("hi-IN", 0xf0c00439);

我无法在这个语言包中找到任何文档。下面是如何从语言栏中选择它。我需要从C#代码中选择这两种GAIL和CBI类型。请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2022-01-19 13:31:10

看起来你需要检查一个input locale identifier (以前称为键盘布局,HKL),而不是InputLanguage。这就是为什么当你有不同的布局时,你的语言保持不变(印地语)。您不需要包文档,因为安装的‘语言’是系统的一部分。

OS对“InputLanguage”的定义比“键盘布局”更广。它有所有的输入通道,包括“语音到文本”,一个输入法编辑器(IME).当键盘布局设置时,它也会设置InputLanguage.CurrentInputLanguage

因此,是的,user32.dll是调用窗口的C++函数的正确方式:

代码语言:javascript
复制
HKL GetKeyboardLayout(
  [in] DWORD idThread
);
HKL ActivateKeyboardLayout(
  [in] HKL  hkl,
  [in] UINT Flags
);

只需尝试此DLL中的其他函数即可。例如GetKeyboardLayout (获取线程当前布局)、GetKeyboardLayoutList (获取所有系统布局)、ActivateKeyboardLayout (将HKL设为活动)。

请检查https://github.com/vurdalakov下面的要点,以处理布局,而不是语言:https://gist.github.com/vurdalakov/9cea795e82109fdacb7062dcb122b42e

希望这个会有帮助的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70632681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档