捕获按键消息

时间:2008-10-17 22:37:55

标签: c# .net winforms winapi

我们正在为内部Kiosk构建一些软件。该软件是一个带有嵌入式浏览器的基本.net窗体。自助终端配备了用户可以使用的垫子。当用户踏上垫子时,它通过键盘发送键命令。当用户离开垫子时,它会发送不同的组合键。

我们想要做的是在我们的应用中查找组合键,并根据用户是打开还是关闭,使浏览器转到其他网址。

如何挂钩键盘以适应这种情况?

3 个答案:

答案 0 :(得分:2)

如果您的窗口是活动窗口,那么您可以简单地覆盖表格ProcessCmdKey,如下所示。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    const int WM_KEYDOWN = 0x100;
    const int WM_SYSKEYDOWN = 0x104;

    if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
    {
        switch (keyData)
        {
            case Keys.Down:
                this.Text = "Down Arrow Captured";
                break;

            case Keys.Up:
                this.Text = "Up Arrow Captured";
                break;

            case Keys.Tab:
                this.Text = "Tab Key Captured";
                break;

            case Keys.Control | Keys.M:
                this.Text = "<CTRL> + M Captured";
                break;

            case Keys.Alt | Keys.Z:
                this.Text = "<ALT> + Z Captured";
                break;
        }
    }

    return base.ProcessCmdKey(ref msg, keyData);
}

答案 1 :(得分:1)

关于USB读卡器,我刚刚做了类似的搜索。

我遇到了this article on CodeProject来处理设备的原始输入。

我的主要目标是区分充当键盘的多个设备。您的设备可能具有不同的界面。它也可能有SDK和文档。我们不知道。

答案 2 :(得分:0)

如果您的应用程序不是主窗口,请查看RegisterHotkey Win32 API,其中包含p/invoke here的一些信息。