繁体   English   中英

C#键挂钩键按下事件

[英]C# Key hooks key down event

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

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");
    }

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

从您的代码段中,您似乎正在走WinForms关键事件的路线。 如果用户在您的应用程序中进行了按键组合,而您又对其他内容进行了“打开”操作,那么您将走上正确的道路。 您只需要使其动态即可查看是否按下了用户定义的项目。 因此,当您保存用户设置时,请将其转换为键码,以便您可以进行常规

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

您需要考虑多种情​​况,修饰符Shift,Alt和Control可以为无,一,二或全三。 在我上面的内容中,如果用户仅选择Ctrl,则FirstModKey和SecondModKey可以具有相同的值,或者如果用户同时选择Ctrl和Shift,则它们可以进行处理。 然后FirstKey是非mod键,例如'A'。

该应用程序将再次打开

但是,从引号看来,您似乎想要一个全局钩子,即无论用户在任何应用程序中的任何位置,并且您的应用程序都未运行,您都希望监听并执行其关键代码。 您需要研究服务和低级挂钩。 这可能接近键盘记录,您需要注意谁是受众,安全风险以及可能破坏合规性的问题。

    {
        //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;
    }

这与我原来的原始代码一起工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM