簡體   English   中英

在 C# 的語言中切換多種鍵盤類型

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM