0

残念ながら、スペースバーが押されたときに日付/時刻を記録するアプリケーションがあります。さまざまな理由で、ウィンドウに常にフォーカスがあるとは限りません。例: ウイルス チェッカーのポップアップ、iTunes の更新、Windows の更新など

ジョイスティック ボタンを使用すると、どのウィンドウにフォーカスがあるかに関係なく、ボタンを押すイベントを常に検出し、押された日付/時刻を記録できます。

今、私はいくつかのゲームのチュートリアルを見てきましたが、ジョイスティックのポーリングが画面の更新イベントに関連付けられているようです。とにかく押されても違いはありません。

それは私のニーズにあまり合わないので、ジョイスティックを頻繁にポーリングするスレッドを実行することを検討しています

私の質問は

  1. バックグラウンドスレッドが最善の解決策です
  2. ジョイスティックをポーリングする頻度
  3. ポーリング頻度を決定するには、どのようなタイマーを使用すればよいですか。

応答が少なくともキーボードと同等であることを望みます。また、トリガーが押されている場合に自動リピートしないことを確認する必要があります。

任意のサンプル コード (C#) を歓迎します

ありがとう

アレックス

4

3 に答える 3

2

キーボード イベントをキャプチャできないという理由だけでジョイスティックをポーリングしたい場合は、戦略を練り直す必要があると思います。

フォームにフォーカスがない場合でも、キーボードの状態を確認できる方法があります。

  1. SetWindowsHookEx API 呼び出しを使用して、C# で実行できるシステム全体のキーボード フックを設定できます。

これはアンマネージ コードと Windows API を少し掘り下げていますが、スペースバーを押して日時をキャプチャする必要があるという理由だけでジョイスティックをコンピューターに追加する必要がないため、ジョイスティックをポーリングするよりも良い考えだと思います。

C# のキーボード フックについては、Google で少し検索してください。多くの人が信じているよりも簡単です。

これを行うためにタイマーオブジェクトを使用することは、まったく良い考えではないと思います。キーを押すだけでそれを行う必要があると言ったと思います。

于 2009-04-09T02:10:31.367 に答える
1

AHK (Auto HotKey)のようなものを使用します。これは、EXE にコンパイルできる単純な言語であり、キーボードとマウスを自動化するために設計されています。ジョイスティックでどれだけうまく機能するかは 100% わかりませんが、彼らが wii リモコン用の何かを書くことができた可能性があります。

また、IRC チャンネルとフォーラムには、必要に応じて助けてくれる人が常にいます。

于 2009-04-09T02:22:41.557 に答える
1

最善の策は、フォームに Timer オブジェクトを作成し、ジョイスティック チェックを Tick イベントに関連付けることです。

また、このような単純なものを 100 ミリ秒ごと (1 秒間に 10 回) 実行しても、CPU 使用率にほとんど影響がないこともわかりました。

于 2009-04-09T01:55:23.430 に答える