2012-02-17 72 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