2012-02-17 74 views
1

我正在爲觸摸屏顯示器的Winform應用程序工作。 該應用程序由一個網頁瀏覽器和一個屏幕鍵盤組成。 我擁有最需要的一切,但我面臨的問題是 有兩種輸入語言,英語和韓語。 任何熟悉使用兩種語言的人都會告訴您,正確的alt鍵 用於在語言之間來回切換。 我需要模擬這個擊鍵,但我找不到任何東西。Sendkeys.Send()for right alt key?任何替代品?

我已經找到方法來模擬左/右轉變鍵,左/右CTRL鍵。 但是沒有任何的左/右alt鍵。

我有其他的方法嗎?

+0

我使用左Alt鍵/左Shift鍵的組合來使用Windows中的內置語言欄切換鍵盤。查看語言欄的設置對話框。也許你可以將鍵盤快捷鍵設置爲更適合你的東西。 – 2012-02-17 15:06:54

回答

1

您可以使用keybd_eventRALT鍵碼VK_RMENU。鍵碼的完整列表中here

你將不得不P/Invoke這樣的按鍵:

[DllImport("user32.dll", SetLastError = true)] 
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); 

public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key down flag 
public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag 
public const int VK_RMENU = 0xA5; 

keybd_event(VK_RMENU, 0, KEYEVENTF_EXTENDEDKEY, 0); 
keybd_event(VK_RMENU, 0, KEYEVENTF_KEYUP, 0); 
+0

沒有必要再使用P/Invoke並再次發明輪子! 'Keys.RMenu'相當於'VK_RMENU'。 – 2012-02-17 15:42:39

+0

我使用了你給我的東西,而且擴展鍵工作正常,但它好像沒有釋放。如果我輸入某些內容並按退格鍵,則它更像一個撤消功能。 – 2012-02-17 19:40:45

1

你不是真的想找到一種方法來發送Alt鍵,對不對?你真正想要的是能夠改變輸入語言。在這種情況下,請直接找到源代碼。

Windows API有更改當前活動鍵盤佈局的方法。它們不是.NET Framework的一部分,但可以使用P/Invoke從C#調用它們。

ActivateKeyboardLayout的MSDN文檔是here

而P/Invoke簽名可以找到here

+1

'InputLanguage'類可以做你正在尋找的東西。它在.NET Framework中可用! – 2012-02-17 15:38:43

1

MSDN給出RMenu enum條目的右鍵。

+0

我不認爲可以和sendkey.send一起工作 – 2012-02-17 20:04:48

2

您不需要模擬Alt + Shift鍵來改變輸入語言。您可以在System.Windows.Forms命名空間中使用InputLanguage類:

 var currentLang = InputLanguage.CurrentInputLanguage; 
     var installedLangs = InputLanguage.InstalledInputLanguages; 
     if (installedLangs.Count > 1) 
      InputLanguage.CurrentInputLanguage = 
       installedLangs[1 - installedLangs.IndexOf(currentLang)]; 

當你安裝了正好2的輸入語言,該代碼段這兩個之間切換。你明白了。對?

+0

這很酷,我設法錯過了那個。雖然它看起來是Winforms框架的一部分。 WPF可能有相當的一個。 – 2012-02-17 16:05:07

+0

我這樣做,因爲網站強制韓文輸入用戶是否有韓文作爲活動輸入 – 2012-02-17 19:41:49