2011-07-01 5 views
2

ゲーム用のホットキーヘルパーのようなアプリケーションを作成したいとします。たとえば、Warcraft 3では何らかの理由で数字キーを使用します。 "Numpad 1 key pressed"メッセージを "X"キーを押してOSに送ることは可能ですか?私はフックを使ってこれをやろうとしていましたが、わかりませんでした。私は明らかに希望します。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

ありがとうございます。今、2つの異なる問題が発生しました。メモ帳のようなアプリケーションでも動作しましたが、大きなゲームのようなWarcraftのようなものでは動作しませんでした。第2の問題は、「X」キーを1回押すたびにnumpad1キーが4回シミュレートされることです。 –

関連する問題