1

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

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

我有其他选择吗?

4

4 回答 4

2

您可以keybd_event使用RALTkeycode VK_RMENU。完整的键码列表在这里

您必须像这样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); 
于 2012-02-17T15:10:43.730 回答
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 种输入语言时,此代码片段会在这两种语言之间切换。你明白了。对?

于 2012-02-17T15:16:43.230 回答
1

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

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

ActivateKeyboardLayout 的 MSDN 文档在此处

P/Invoke 签名可以在这里找到。

于 2012-02-17T15:11:36.373 回答
1

MSDN给出了RMenuright-alt 的枚举条目。

于 2012-02-17T15:11:45.850 回答