回答編集履歴

1

追記

2019/10/07 11:55

投稿

Q71
Q71

スコア995

test CHANGED
@@ -1,9 +1,21 @@
1
1
  区別できればいいなら
2
2
 
3
- https://godai.hateblo.jp/entry/20110617/1308310209
3
+ [https://godai.hateblo.jp/entry/20110617/1308310209](https://godai.hateblo.jp/entry/20110617/1308310209)
4
4
 
5
5
 
6
6
 
7
- 興味あるのでサンプル作成するかも。
7
+ ~~興味あるのでサンプル作成するかも。~~
8
8
 
9
9
  pinvoke.net を見るといいと思います。
10
+
11
+ 提示できないですが、サンプル作ってみました。
12
+
13
+ RawInput を取ってしまうからか、TextBox への入力がされなくなってしまいました。[`WndProc`](https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.control.wndproc?view=netframework-4.8) 内で何かする必要がありそうです。ああ、[`RAWINPUT`](https://docs.microsoft.com/ja-jp/windows/win32/api/winuser/ns-winuser-rawinput)のRemarkに書いてあることをすれば良いのかな。
14
+
15
+ おそらく、`WM_KEYDOWN`, `WM_KEYUP` に相当するメッセージのタイミングで発生するようで、2回ずつ発生してしまいます。(キーを押しっぱなしだと連続して何度も発生する)
16
+
17
+ [`RAWINPUTHEADER`](https://docs.microsoft.com/ja-jp/windows/win32/api/winuser/ns-winuser-rawinputheader)の `hDevice` が、デバイスごとに変わることを確認しました(PS キーボードと USB キーボードで、USB は違うポートに差し替えていません)。最初に「プレイヤー1、何かキーを押して下さい」「プレイヤー2、何かキーを押して下さい」と、キー入力させてその `hDevice` を覚えておけば、どちらの入力かを知ることはできそうです。
18
+
19
+
20
+
21
+ 関数名で検索すれば C++ のコードはいくらでもあるので、[PINVOKE.NET](http://pinvoke.net/)を参考に、ゴリゴリ宣言していけばできます。