ポーリング ジョイスティック C#
-
06-09-2019 - |
質問
残念ながらスペースバーが押された日付/時刻を記録するアプリケーションがありますが、さまざまな理由でウィンドウに焦点が当てられているとは限りません。例: ウイルス チェッカーのポップアップ、iTunes アップデート、Windows アップデートなど
そこで、私が考えた素晴らしいアイデアは、ジョイスティックのボタンを使用することです。そうすれば、どのウィンドウにフォーカスがあるかに関係なく、常にボタンを押すイベントを検出し、それが押された日付/時刻を記録できます。
今、いくつかのゲームチュートリアルを見ましたが、ジョイスティックのポーリングが画面更新イベントに関連付けられているようです。ゲームでは、コンピューターが遅くて画面が頻繁に更新されない場合、ジョイスティックボタンがあると思うからです。とにかく押しても何も変わりません。
それは私のニーズにはあまり合わないので、ジョイスティックを時々ポーリングするスレッドを実行することを検討しています
私の質問は次のとおりです
- バックグラウンドスレッドが最良の解決策です
- どのくらいの頻度でジョイスティックをポーリングする必要がありますか
- ポーリング頻度を決定するにはどのようなタイマーを使用すればよいですか。
少なくともキーボードと同等のレスポンスが欲しいです。また、トリガーが押された場合に自動繰り返しが行われないことを確認する必要があります。
サンプルコード (C#) は歓迎です
ありがとう
アレックス
解決
あなたの最善の策は、フォーム上のTimerオブジェクトを作成し、Tickイベントにジョイスティックチェックを結ぶことであろう。
私はまた、このように100ms毎に(10回秒)を簡単なものを実行すると、CPU使用率にはほとんど影響を持っていることを発見しました。
他のヒント
キーボードイベントをキャプチャできないという理由だけでジョイスティックをポーリングしたい場合は、戦略を練り直す必要があると思います。
フォームにフォーカスがない場合でも、キーボードの状態を確認できる方法があります。
- SetWindowsHookEx API 呼び出しを使用して、C# で実行できるシステム全体のキーボード フックをセットアップできます。
これはアンマネージ コードと Windows API について少し掘り下げていますが、スペースバーを押して日時をキャプチャする必要があるからといって、ジョイスティックをポーリングするよりも良いアイデアだと思います。
Google で C# のキーボード フックを少し検索してください。それは多くの人が信じているよりも簡単です。
これを行うためにタイマー オブジェクトを使用するのはまったく良い考えとは思えません。キーを押すだけで実行する必要があるとおっしゃったと思います。
それはEXEにコンパイルすることができ、簡単な言語であるに AHK(オートホットキー)のようなものを使用しますキーボードやマウスを自動化するために設計されて、私はそれがジョイスティックでどのように機能するかだけでなく、100%わからないんだけど、私はそれは、彼らがWiiリモコンのためのいくつかのものを記述するために管理可能だと確信しています。
必要であれば、また、IRCチャンネルやフォーラムは、常に喜んで手伝ってくれる人を持っています。