簡體   English   中英

有沒有一種方法可以在C#中已安裝的Windows鍵盤布局之間進行切換?

[英]Is there a way to switch between installed windows keyboard layouts in c#?

我有兩個文本框,一個用於英語,一個用於俄語。 為了易於使用,我想知道c#中是否有某些內容可以告訴我的系統切換到已安裝的鍵盤布局之一。

然后,我計划設置一種方法,以使其中一個文本框成為焦點時立即執行此操作。

因此,當俄語框處於焦點位置時,將使用Windows俄語鍵盤布局,反之亦然。

我在網上搜索了一下,但沒有找到任何種類。 因為我希望它早點完成,所以我做了一個變通辦法,只是使用Input-simulator模擬了在Windows上切換鍵盤布局所必需的按鍵。 現在,我正在尋找更好的解決方案。

Public Form1()
{
   // I use the method when either of the text-boxes are used.
   // When I find a better solution, there will obviously be two separate methods
   txtRussian.GotFocus += SwitchKeyboard;
   txtEnglish.GotFocus += SwitchKeyboard;
}
private void SwitchKeyboard(object sender, EventArgs e)
{
   // shift alt for keyboard layout switch
   sim.Keyboard.ModifiedKeyStroke(VirtualKeyCode.SHIFT,VirtualKeyCode.LMENU);
   // LMENU (Left Alt) tends to still be pressed after you he finished the modified keystroke.
   // So that makes any first key the user presses be the "LAlt + {a key}" instead of just a key.
   // By normally simulating its press again the issue is gone
   sim.Keyboard.KeyPress(VirtualKeyCode.LMENU);

}

當然,這不是我真正想要的,因為每當您交替進入和退出選項卡並重新關注文本框時,它只會切換到安裝的下一個鍵盤布局,而不是為其指定的鍵盤布局。文本框的意思。

是的,有沒有一種方法可以使用C#切換到指定的Windows鍵盤布局?

System.Windows.Forms命名空間中有“ InputLanguage”類。 您可以使用“ InputLanguage.CurrentInputLanguage”屬性來更改當前使用的鍵盤布局。

在stackoverflow上已經有關於此的另一篇文章: C#-在相同鍵盤布局的兩個不同IME之間自動切換

但是,您只能使用該語言更改輸入語言,而不能更改語言內部的布局。 但是我認為您需要更改輸入語言。 如果還需要更改語言的輸入布局,可以通過設置TextBox的.ImeMode屬性來進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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