2013-04-26 96 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'。

應用程序將再次打開

但從報價像你想全局鉤子的聲音,即無論用戶在任何應用程序,和你不跑,你要聽和如果它的密鑰代碼正常工作。您需要查看服務和低級別的掛鉤。這可能接近鍵盤記錄,你需要小心你的觀衆是誰,安全風險和擔心你可能違反合規。