密钥组合c#以外的热键

时间:2015-07-03 10:16:23

标签: c# .net windows

我正在实现像

这样的快捷键组合逻辑

Ctrl + A

Ctrl + Alt + D

但是现在我正在寻找一种技巧来实现没有热键组合的键盘组合,例如: A + D 但没有得到任何正确的东西。

所以请帮助实施它。

更新

目前我无法添加除热键组合之外的组合键。因为每当我按下两个键时,例如:**A + D**它只返回单键ascii,所以我没有得到两个键组合。

我使用了以下内容 http://www.codeproject.com/Articles/442285/Global-Shortcuts-in-WinForms-and-WPF

2 个答案:

答案 0 :(得分:1)

在过去,我使用GetKeyState Api(在类似的类中用于捕获系统范围的快捷方式)。也许现在有新的变种(我相信WPF有一个KeyBoard.IsKeyDown),但这应该仍然有效:

    [DllImport("user32", CharSet = CharSet.Auto,
    ExactSpelling = true, CallingConvention = CallingConvention.Winapi)]
    static extern short GetKeyState(int keyCode);

    public static bool CheckKeysPressed(params Keys[] keys)
    {
        for (int i = 0; i < keys.Length; i++)
            if (!CheckKeyPressed((int)keys[i])) return false;
        return true;
    }
    public static bool CheckKeyPressed(Keys key)
    {
        return CheckKeyPressed((int)key);
    }
    public static bool CheckKeyPressed(int vkey)
    {
        short ks = GetKeyState(vkey);
        return ks == 1;
    }

用法:if(CheckKeysPressed(Keys.A, Keys.D)) {/*...*/}

答案 1 :(得分:0)

A 的事件中声明2 bool变量(比如IsADownIsDDown)和“true” d 即可。如果其他bool已关闭,也会检测两个事件。如果是,那么按下两个按钮就可以做你要做的事。