2013-04-26 166 views
0

创建钥匙钩以便按下组合键后,应用程序将再次打开。 我特地到这样做的各种方式,但我不知道该输入组合将完全不同于这个例子是什么:C#钥匙扣关键事件

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

如何去了解我们的值作为组合框的

+0

这些代码段不会出现有任何与所需的功能,无论“再次打开”和“挂机键”可能意味着。你需要更好地解释你想要完成的事情。 – 2013-04-26 14:06:53

回答

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

这个工作我原来已有的代码

1

从你的代码片段,它看起来像你要去的WinForms关键事件的路线不知道。如果用户在你的应用程序中做了一个键组合,并且你打开了其他的东西,那么你就走在了正确的道路上。您只需要将其设为动态即可查看是否按下了用户定义的项目。 所以,当你保存用户设置,将其转​​换为一个键码,所以你可以做通用

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

你需要考虑多个方案,修饰符SHIFT,ALT和控制可能是没有,有一个两个或全部三个。在我的上面,如果用户只选择Ctrl,则可以将FirstModKey和SecondModKey设置为相同的值,或者如果他们同时执行了Ctrl和Shift,则可以进行处理。然后FirstKey是非模式密钥,如'A'。

应用程序将再次打开

但从报价像你想全局钩子的声音,即无论用户在任何应用程序,和你不跑,你要听和如果它的密钥代码正常工作。您需要查看服务和低级别的挂钩。这可能接近键盘记录,你需要小心你的观众是谁,安全风险和担心你可能违反合规。