C#Key挂钩按键事件

时间:2013-04-26 13:47:23

标签: c# key hook

创建一个键钩子,以便在按下组合时,应用程序将再次打开。 我已经研究了各种方法,但是我不知道输入组合会是什么,不像这个例子:

if (e.KeyCode == Keys.C && e.Modifiers == Keys.Control && e.Modifiers == Keys.Shift)
 {
//Do work
}
else if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
{
//Paste
}

我们的输入组合来自用户,他们从组合框中选择要输入的组合。

public void KeyboardHooks_OnKeyPress(object sender, KeyPressArgs e)
    {
        //The first input
        if (LastKey != Keys.None)
        {
            Keys combinationOne = (Keys)cmbCombinationOne.SelectedValue;
            Keys combinationTwo = (Keys)cmbCombinationTwo.SelectedValue;
        }
        LastKey = e.Key;
        MessageBox.Show("KeyPressed");
    }

不确定如何将我们的值设置为组合框的

2 个答案:

答案 0 :(得分:1)

从你的代码片段看起来你正在走WinForms关键事件的路线。如果用户在您的应用程序中执行了一个组合键并且您打开了其他内容,那么您就是在正确的道路上。您只需要使其动态化以查看是否按下了用户定义的项目。 因此,当您保存用户设置时,将其转换为键码,以便您可以执行通用

if(e.KeyCode == Settings.FirstModKey && e.KeyCode == Settings.SecondModKey && e.KeyCode == Settings.FirstKey)

您需要考虑多个场景,修改器Shift,Alt和Control可以是none,one,two或all三个。在我的上面,如果用户选择了Ctrl,你可以让FirstModKey和SecondModKey具有相同的值,或者如果他们同时执行Ctrl和Shift,他们可以处理它们。然后FirstKey是非模式键,如'A'。

  

应用程序将再次打开

然而,从引用来看,它听起来像是你想要一个全局钩子,无论用户在任何应用程序中的哪个位置,如果你的用户没有运行,你想要听,并且如果它是你的密钥代码就可以工作。你需要研究一个服务和低级别的钩子。这可能接近键盘记录,您需要小心您的受众是谁,安全风险以及您可能违反合规性的担忧。

答案 1 :(得分:0)

    {
        //The first input
        if (LastKey != Keys.None)
        {
            int combination1 = (int)Enum.Parse(typeof(Keys), cmbCombinationOne.SelectedValue.ToString());
            int combination2 = (int)Enum.Parse(typeof(Keys), cmbCombinationTwo.SelectedValue.ToString());

            int LastKeyPress = (int)Enum.Parse(typeof(Keys), LastKey.ToString());


            ThisKey = e.Key;

            if (combination1 == LastKeyPress && combination2 == Convert.ToInt32(ThisKey))
            {
                MessageBox.Show("Key pressed");
            }
        }
        LastKey = e.Key;
    }

这适用于我原来的现有代码