我使用印地语印度语输入3语言包为印地语。我需要为这种语言提供多个布局选项,但是当我检查已安装的语言类型时,它会为这个语言包中的所有布局显示相同的布局Id。我的目标是允许用户在来自我的WinForms应用程序的Mangal和Mangal输入之间切换。以下是代码:
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都是相同的,。
[DllImport("user32.dll")]
private static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags);
LoadKeyboardLayout("hi-IN", 0xf0c00439);我无法在这个语言包中找到任何文档。下面是如何从语言栏中选择它。我需要从C#代码中选择这两种GAIL和CBI类型。请帮帮忙。

发布于 2022-01-19 13:31:10
看起来你需要检查一个input locale identifier (以前称为键盘布局,HKL),而不是InputLanguage。这就是为什么当你有不同的布局时,你的语言保持不变(印地语)。您不需要包文档,因为安装的‘语言’是系统的一部分。
OS对“InputLanguage”的定义比“键盘布局”更广。它有所有的输入通道,包括“语音到文本”,一个输入法编辑器(IME).当键盘布局设置时,它也会设置InputLanguage.CurrentInputLanguage。
因此,是的,user32.dll是调用窗口的C++函数的正确方式:
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
希望这个会有帮助的。
https://stackoverflow.com/questions/70632681
复制相似问题