2011-07-01 40 views
2

我想編寫一個應用程序,比如遊戲的熱鍵助手,例如在魔獸爭霸3中,我出於某種原因使用了數字鍵盤鍵。按「X」鍵可以發送「Numpad 1鍵按下」消息給操作系統嗎?我一直在試圖用鉤子做這個,但我無法弄清楚。我希望我很清楚。通過鉤子在C#中重定向keydown?

我已經使用這個類的鉤子:Global System Hooks in .NET

只要我的代碼是這樣的:

globalKeyboardHook hook = new globalKeyboardHook(); // A Global Hook 

private void btnHook_Click(object sender, EventArgs e) 
{ 
    hook.hook(); // Set the hook 
    hook.HookedKeys.Add(Keys.X); // Hook the X key 
    // i removed other hooks purify the code, six hooks total. 
    hook.KeyDown += new KeyEventHandler(hook_KeyDown); // add eventhandler 
    Program.hookActive = true; // inform the program that hook is active. 
    Guncelle(); // update form components (buttons enabling/disabling according to hook status etc.) 
} 

private void hook_KeyDown(object sender, KeyEventArgs e) 
{ 
    KeyEventArgs k = new KeyEventArgs(Keys.NoName); 
    switch (e.KeyCode) 
    { 
     case Keys.X: 
      k = new KeyEventArgs(Keys.NumPad1); 
      OnKeyDown(k); 
      break; 
      // i removed other cases to purify the code, six cases total. 
    } 
} 

回答

2

是的,你可以使用WinAPI的SendInput()keyb_event()電話。例如:

keybd_event(VK_NUMPAD1, 0, 0, 0) 
+0

謝謝你的回答,現在已經產生了兩個不同的問題。它適用於記事本等應用程序,但它不適用於類似魔獸的大型遊戲。第二個問題是,每當我點擊一次「X」鍵時,numpad1鍵模擬4次。 –