問題タブ [directinput]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - DirectInputで切断されたキーボードを判別する方法
EnumDevices(...、DIEDFL_ATTACHEDONLY)を使用してHID接続を監視しています。ゲームコントローラーを切断すると、コールバックに表示されなくなります。ただし、キーボードを切断しても、EnumDevicesに表示されます。
APIを調べましたが、デバイスが接続されているかどうかを他に問い合わせる場所がわかりません。
c# - 他の名前空間をVisualC#にインポートする方法は?
私の質問が少しお粗末に思えても申し訳ありませんが、答えが見つかりません。XNAゲームにDirectInputを使用したいと思います。読んだことがありますが、これがXBox360コントローラー以外のゲームパッドから入力を取得するための最良の方法のようです。最初のステップは、Microsoft.DirectX.DirectInput名前空間を含めることですが、その方法はよくわかりません。クラスの最初に挿入するだけでは機能せず、ビジュアルC#はそれを認識しません。
これにより、DirectX SDKをダウンロードする必要があると思いましたか?そこにはたくさんのものがあり、ファイルは大きいです。単一の名前空間をダウンロードするにはどうすればよいですか?これも可能ですか?単一の名前空間をダウンロードできる場合、ファイルはどこに配置しますか?
今、あなたは私の頭の中ですべての質問がぶらぶらしているのを見ることができます。では、Visual C#でMicrosoft.DirectX.DirectInput名前空間を認識させて、メソッド、プロパティ、その他すべての優れた機能を使用できるようにするにはどうすればよいでしょうか。
ありがとう!
c# - .dll ファイル参照時のエラー メッセージ
XNA ゲームで DirectInput を使用したいのですが、.dll ファイルの参照に関して問題があります。Microsoft Visual Studio C# Express Edition を使用しています。これはまさに私がしていることです:
- 「参照」を右クリック
- 「参照を追加」を選択
- .dll ファイルに移動し、[OK] をクリックします。
次に、次のエラーが表示されます。
上記のように、Microsoft.DirectX.DirectInput 名前空間を参照したいのですが、それがどの .dll ファイルにあるのかわからないため、"d3dref9.dll" を選択しました。ただし、そのディレクトリの下にあるすべての .dll ファイルは機能しないため、選択したファイルのどれでも同じエラーが発生します。これで、他の .dll ファイルを使用してこれを達成できましたが、何らかの理由で DirectX ファイルが機能しません。この男がコードの2行目を見て、それを行った可能性があることはわかっています。
DirectX SDK をインストールしていますが、.dll ファイルを参照できないのはなぜですか? また、参照できるようにするにはどうすればよいですか?
ありがとう!
c++ - グローバルホットキーブロックのリバースエンジニアリング
ウィンドウ (D3D) がアクティブな間 (Ctrl-Alt-Del を除く)、すべてのグローバル ホット キーを無効にする (キャプチャ/インターセプト/ブロックする) アプリケーション (ゲーム) をリバース エンジニアリング (OllyDbg) しようとしています。
私の質問は、ウィンドウがアクティブなときに、そのようなアプリケーションがグローバル ホット キー (winkey、CTRL + Esc、および他のアプリケーションで設定されたグローバル ホットキーを含む) をどのようにキャプチャ/無効にすることができるかということです。
DirectInput を使用しているようです (問題がある場合)。低レベルのフック ( ) が設定されていないことがわかりますSetWindowsHookEx
。他のどのような方法でそのようなことを行うことができますか?
観察事項:
- アプリケーションが一時停止されている場合 (ウィンドウがまだフォーカスされている間)、ウィンドウがフォーカスされている間、ホット キーは引き続き無効になります。ウィンドウを別のものに切り替えると、それらが有効になります。中断されたアプリケーション ウィンドウに戻ると、ホット キーが再び無効になります。
- ウィンドウがフォーカスを失った後にアプリケーションをサスペンドし、サスペンドされたウィンドウに戻ると、ホット キーは完全に機能します。
- 編集:アプリケーションは、で設定されたグローバル ホットキーをブロックするように見えます
RegisterHotKey
が、フック ( ) を使用して作成されたホットキーは無効にしませんSetWindowsHookEx
。
上記の実験は、アプリが中断されていても機能するウィンドウに関連する設定であることを示しているようです。ある種の DirectInput 設定でしょうか? (私が目にする唯一の DINPUT API 関数呼び出しもDINPUT8.DirectInput8Create
.)
ゲームウィンドウがフォーカスされている間、他のアプリケーションからのホットキーが通常どおり機能するように、この動作を変更することを期待してこれを行っています。アイデアやヒントをいただければ幸いです。
c# - ゲームが開始されない
XNAでDirectInputを使用していますが、次のコードを実装すると、奇妙な理由でゲームが開始されません。
それは本当に私のゲームを壊します、それを残すことはそれを壊しますが、行をコメントすることはうまくいきます。理由は全くわかりません。私はMicrosoft.DirectX.DirectInput
すべてを参照しました。私はまったく新しいプロジェクトを開始し、そのラインに入ったばかりでしたが、ゲームを開始するのに運がありませんでした。
これは文字通り私の完全なコードでありInput.InitializeController()
、のinitializeメソッドから呼び出すだけGame1()
です。
誰かがこれとの取引が何であるか知っていますか私は完全に困惑しています。
ありがとう!
c++ - C++ と DirectInput を備えた USB ジョイスティック
USB ジョイスティックからデータ (x/y 軸、押されたボタンなど) を読み取ろうとしてきましたが、DirectInput について聞いたことがあります。まともな例やウォークスルーを見つけるために長い時間を探していましたが、ほとんど成功していません。誰かが簡単なチュートリアルを共有したり、正しい場所に私を案内したりできるなら、私はあなたのおかげです. ありがとうございました
編集: Windows プラットフォームでこの目標を達成しようとしています
python - DirectX でのマウス操作を可能にする Python モジュール
directX ゲーム中にマウスを動かすことができる Python モジュールを知っている人はいますか?
Ctypes と Hammonds の win32 モジュールを試しましたが、DirectInput が通常の Python モジュールのマウスへのアクセスをブロックしているため、directX では機能しません。
HID エミュレーションを使用してこれを行う回避策またはモジュールはありますか?
c++ - Receiving key states from Direct Input and GetDeviceState() (C++)
I am making a wrapper for keyboard input using Direct Input. To grab the key states, the function GetDeviceState()
is called with a char buffer.
This is all well and good, but now to send key events I must iterate through the buffer and check against all the keys that were pressed. I was hoping there would be a callback instead that only passed the key codes that were pressed.
If anybody has experience with Direct Input, is iterating through the key code buffer the only way to check for key presses?
c++ - DirectInput8 EnumDevices が痛々しいほど遅くなることがある
ときどき (実行の約 50% で)、EnumDevices が戻るのに 5 ~ 10 秒かかります。通常はほぼ瞬時です。この種の行動に関する他の報告は見つかりませんでした。
物事がこれほど遅い場合は、stdout を見てプロファイリングしても問題ありません:) これ:
デバイスの列挙を通じてランダムな時点でハングしているようです-コールバックがまったく呼び出される前になることもあれば、数回後に発生することもあれば、最後の呼び出しの後に発生することもあります。
これは明らかに単純化されたコードの塊です。私は実際に OIS 入力ライブラリ ( http://sourceforge.net/projects/wgois/ ) を使用しているので、コンテキストについては、ここで完全なソースを参照してください。
そこには特にフルーティーなものはないようですが、初期化の何かが原因である可能性があります.DI8については、それを見つけるのに十分な知識がありません.
なぜこんなに遅いのかについてのアイデアは大歓迎です!
編集:
etl トレース ファイルでハングをキャッチし、Windows パフォーマンス アナライザーで分析しました。EnumDevices
最終的に を呼び出し、 を呼び出し、DInput8.dll!fGetProductStringFromDevice
を呼び出しHIDUSB.SYS!HumCallUSB
、 を呼び出しKeWaitForSingleObject
て待機するように見えます。10 回のうち 9 回 (文字通り - トレースには 10 個のサンプルがあります)、これは非常に迅速に返され (それぞれ 324us)、コールスタックの準備が整い、usbport.sys!USBPORT_Core_iCompleteDoneTransfer
その後に が続きHIDUSB.SYS!HumCallUsbComplete
ます。これは非常に正常に見えます。
しかし、10 分の 1 の割合で、これが戻るのにほぼ正確に 5 秒かかります。準備中のコールスタックntkrnlmp.exe!KiTimerExpiration
には、関数の代わりがありHIDUSB.SYS
ます。これはすべて、HIDUSB.SYS ドライバーが 5 秒のタイムアウトで非同期的にデバイスにクエリを実行していることを示していると思いますが、失敗してこのタイムアウトに達することがあります。
この障害が特定の 1 つのデバイスに関連しているのか (私はいくつかの USB HID を持っています)、それともランダムなのかはわかりません。常に発生するとは限らないため、テストするのは困難です。繰り返しになりますが、誰かが私に提供できる情報は大歓迎ですが、DirectInput が奇妙な状況にあることを考えると、Microsoft がすぐにこれを修正するという希望はありません!
おそらく、入力の初期化を早めに非同期で開始し、ユーザー入力が発生するまでに 5 秒の遅延が発生する場合があることを受け入れる必要があるでしょう。