0

特定のフォームでキーが押されたときにキーボードの状態を取得する必要があります。Windows フォームの標準の KeyUp/KeyDown イベントでは十分な速さではありません。DirectInput を試してみるように言われたのですが、ライブラリを操作した経験もスレッドの経験もないので、どうやって始めればよいかまったくわかりません。

DirectInput がキーボードの状態の変化を検出するたびにフォームの関数を呼び出すスレッドを設定するにはどうすればよいですか? 私はデバイスを初期化する方法を知っており、SetEventNotification はほとんど必要なものですが、使用方法がわかりません。

どんな助けでも大歓迎です!

4

2 に答える 2

1

解決策は、おそらく、ウィンドウのキーアップ/キーダウン イベントが十分に高速でないと言っている場合の意味によって異なります。それらは確かにサブミリ秒の解像度で動作します-これはほとんどの人の指よりもはるかに高速です-では、入力を「より速く」読み取ることでどのような利点が得られると思いますか?

イベント ループまたはコードが応答を遅くしているだけではありませんか?

Windows 関数 GetAsyncKeyState/GetKeyState を使用して、DirectInput のキーボード状態のポーリングと同様の (同一の?) 速度を実現できます。DirectInput の最新バージョンは使用していませんが、以前のバージョンでは、ポーリングされていないキーボード状態に対して同じ Win32 イベントを使用していたことは確かです。DirectInput の主な利点は、すべての種類の入力デバイスに共通の抽象化を提供することです。実際には、「高速な」キーボード入力用ではありません (それが何を意味するにせよ)。

Microsoft 自身のドキュメントで、「キーボードとマウスの入力に DirectInput を使用することはお勧めできません...」と記載されています。

于 2010-12-17T13:29:48.083 に答える
0

これは、DirectInput を使用する必要がない場合に役立ちます。

[DllImport("user32.dll")]
private static 
extern short GetAsyncKeyState(System.Int32 vKey);

http://msdn.microsoft.com/en-us/library/ms646293(v=vs.85).aspx

それが役に立てば幸い

于 2010-12-17T13:33:46.577 に答える