2010-12-28 2 views
3

ショートバージョン:私は初期化し、私はHWND/HINSTANCEへのアクセスを持っていない場合、DirectInputのを使用するにはどうすればよいWindowsでのC++:ウィンドウなしでのDirectInputの使用?

背景情報:

私は現在のウィンドウを作成するための、とりわけ、私のプログラムの大部分のためのSFMLを使用しています。魅力のように動作します。しかしSFMLの入力システム(例えば、XInput XBox 360ゲームパッドが必要です)に満足していないし、自分で作成したいと思っています。

私はすでにXInput部分を書いていますが、他のゲームパッド/ジョイスティックについては...また、DirectInputも必要です。 SFMLはWindows関連のコードをユーザーから隠しているので(そして正しく)、hwndやhinstanceにアクセスすることはできません。 DirectInputを使用せずにどうすれば使用できますか?ウィンドウがアクティブなときだけでなく、入力を常に捕まえることができますか? (私は、ウィンドウの(デ)アクティブにイベントに基づいて、それをフィルタリングすることができます。)

おかげで、

バックウィンドウを見つける氏Wonko

答えて

3

があまりにも難しいことではありません、使用EnumThreadWindows()とGetCurrentThreadId ()。

DirectInputにはウィンドウハンドルは必要ありません。 DirectInput8Create()ではインスタンスハンドルが必要です。 GetModuleHandle(NULL)はSFMLアプリケーションに適しています。

+0

ありがとうございます。それについて考えるようになっても...いいえ、入力システムはすべてのウィンドウが作成される前に初期化されます(私はむしろそれを変更しません)。 DirectInputをウィンドウなしで使用する方法はありますか? –

+0

ウィンドウハンドルはどこに必要ですか? DirectInput8Create()は1つを必要とせず、CreateDevice()も行いません。 –

+0

ああ、そうです! hinstanceは十分です。これを調べると、GetModuleHandle(NULL)を呼び出すのと同じくらい簡単なようです。助けてくれてありがとう、私は今これを行うことができるはずです。 –

1

HINSTANCEを取得するには:GetModuleHandle(NULL)

関連する問題