Sendkeys.Send()用于右Alt键?任何替代品?

时间:2012-02-17 15:02:32

标签: c# winforms sendkeys alt

我正在开发一款用于触摸屏显示器的winform应用程序。 该应用程序包括一个Web浏览器和一个屏幕键盘。 我拥有我需要的一切,但我面临的问题是 有两种输入语言,英语和韩语。 熟悉使用两种语言的人可以告诉你正确的 alt 键 用于在语言之间来回切换。 我需要模拟这个击键,但我找不到任何东西。

我找到了模拟左/右 shift 键和左/右 ctrl 键的方法。 但没有左/右 alt 键。

我有其他选择吗?

4 个答案:

答案 0 :(得分:2)

您无需模拟Alt + Shift键击来更改输入语言。您可以在InputLanguage命名空间中使用System.Windows.Forms类:

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

如果您安装了2种输入语言,则此代码片段会在这两种语言之间切换。你明白了。正确?

答案 1 :(得分: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); 

答案 2 :(得分:1)

你真的不想找到一种发送Alt键的方法,对吧?你真正想要的是能够改变输入语言。在这种情况下,直接去源。

Windows API具有更改当前活动键盘布局的方法。它们不是.NET Framework的一部分,但您可以使用P / Invoke从C#中调用它们。

ActivateKeyboardLayout的MSDN文档是here

可以找到P / Invoke签名here

答案 3 :(得分:1)

MSDN为right-alt提供RMenu枚举条目。