C#听键盘组合

时间:2018-12-08 05:51:54

标签: c# winforms keyboard-events

我想编写简单的program,例如在我要登录网站并发现this项目在监听键盘的情况下,将用户名和密码发送到某些地方。

所以我有这个功能:

private void HookManager_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{

}

private void HookManager_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{

}

private void HookManager_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{

}

例如,当我按下a键时,我得到以下结果:

int value = e.KeyValue; // 65
Keys key = e.KeyCode;   // A

所以我想知道如何捕获特定的keyboard combination而不是例如key的一个Ctrl + l吗?

2 个答案:

答案 0 :(得分:4)

您可以将此类代码用于KeyDown:

if(e.KeyCode == Keys.F1 && (e.Alt || e.Control || e.Shift))
{
}

基于MSDN的Get Status Bar Panel Instance文档:

  

每个KeyDown或KeyUp事件都传递一个KeyEventArgs,该参数指定用户按下的键以及是否同时按下了任何修饰键(CTRL,ALT和SHIFT)。

     

当用户按下任意键时,将发生KeyDown事件。按键   用户释放密钥时发生事件。重复的KeyDown事件   如果按住该键,则每次重复该键时都会发生,但是只有一个   用户释放键时会生成KeyUp事件。

     

按下按键时,也会发生KeyPress事件。一种   KeyPressEventArgs与每个KeyPress事件一起传递,并指定   每次按键后组成的字符。

答案 1 :(得分:1)

覆盖ProcessDialogKey()方法是通用的解决方案:

protected override bool ProcessDialogKey(Keys keyData)
    {
        if (keyData == (Keys.Control | Keys.I))
        {
            MessageBox.Show("Ctrl+I");
            return true;
        }
        return base.ProcessDialogKey(keyData);
    }