[英]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.