2016-06-17 20 views
0

C#で複数のキーが押されたかどうかを検出するソリューションを探しました。 私は2人のプレイヤーとこのゲームを持っており、キーを押して移動させるかどうかを検出する必要があります。 (私はC#フォームを使用しています) 私は、2つのキーが同時に押されていて、助けにならなかった場合に検出する答えを見つけました。キーがKeyPressed(C#)を使用して押されたかどうかを検出する方法複数のキーがC#フォームで押されているかどうかを検出する方法

--EDIT--

+1

これはおそらく役に立ちます:http://stackoverflow.com/a/709641/3195195 –

+0

@jeffrycopps申し訳ありませんが、それは助けにはならなかった、答えは私にどのように検出するかを教えてくれるfキーを押さなくても、選択したキーがすべて押されます。 –

+1

あなたの質問はうまくできませんでした。押されて押されているキーは同じですね。 –

答えて

0

問題の原因は、この単純な要求は単にWinformsの下ではサポートされていないことです。

奇妙な音ですか?そうです。 WinFormsはしばしばハードウェアレイヤーの近くにありますが、これは時には面白いかもしれませんが、それは単なるピタかもしれません。

(ハンスによる隠れたヒントの1つ:KeyUpであなたが好きなあなたに多くのキーを追跡することができるようにキーがリリースされました...))

しかし、今desn't周りboolsの束を維持し、KeyDownでそれらを管理する必要が直接解決のためにとKeyUpイベント..:Keyboard.IsKeyDownと入力してください。このようなことでは

コードは動作します:

は、キーが押されているかどうかを判断するためにKeyboard.IsKeyDownを使用します。 eは、KeyEventArgsのインスタンスです。もちろん

if (Keyboard.IsKeyDown(Key.Return)) { 
    btnIsDown.Background = Brushes.Red; } 
... 

することができますだけでなく、複数のキーのCECK:

if (Keyboard.IsKeyDown(Key.A) && Keyboard.IsKeyDown(Key.W)) ... 

唯一の要件は、あなたがWPFからこれを借りることです:

まず:

:名前空間を追加します。
using System.Windows.Input; 

次に:2つの参照プロジェクトにences:

PresentationCore 
WindowsBase 

enter image description here

は今、あなたはKeyPressイベントを含め、いつでもキーボードをテストすることができます。..たぶん、コンソールに印刷するための

-1

あなたは、プログラムレベルのキーボードフックを使用してそれを達成することができます。 user32.dllにSetWindowsHookExのようなWin-API関数を使用できます。ここ

は、それのいくつかの例は、次のとおり

A Simple C# Global Keyboard Hook

Global keyboard capture in C# application
+0

申し訳ありませんが、助けにはなりませんでした。 –

0

この例では、keyUpイベントとのKeyDown検出を覆っています。

Keyup&keydownDetection

+1

私はそれを試しましたが、同時に2つのキー**を押した場合、検出できないので動作しません**。 –

0

...

if (Input.GetKeyDown(KeyCode.G))  {print ("G key pressed");} 
関連する問題