0

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

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

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

4

2 回答 2

1

从您的代码片段看来,您正在走 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”。

应用程序将再次打开

但是,从引用看来,您需要一个全局挂钩,即无论用户在任何应用程序中,而您的应用程序没有运行,您都想收听并工作,如果它是您的密钥代码。您需要研究服务和低级挂钩。这可能接近于键盘记录,您需要注意您的受众是谁、安全风险以及您可能违反合规性的担忧。

于 2013-04-26T14:04:45.150 回答
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;
    }

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

于 2013-04-26T15:27:56.077 回答