HoloLens 2でInputInjectorクラスを使ってみる(キーボード編)
なにがしたいのか
HoloLens 2のプログラムからキー入力を送信したい。
どうやってする?
InputInjectorクラスを使うと実現できそう!
InputInjectorクラスではなにができる?
プログラムから生成されたキーボード、マウス、ゲームパッド、ペン、タッチデバイスの入力をプログラムから送信できる。
やってみる
他のアプリケーションにキー入力を送りたいため、今回はアウトプロセスバックグラウンドタスクから呼び出してみる。
(アウトプロセスバックグラウンドタスクやる意味は単に使えるようになったので使ってみたかったから)
動作
ボタンを押下するとバックグラウンドタスクが立ち上がり、4秒後にキー入力「hello」を送る。
HoloLens 2のバックグラウンドタスクからキー送信できることが分かった!
— ふたば(二葉) (@futanyaha) 2021年8月28日
ネットワーク部分作れば他のデバイスからいろいろできそう pic.twitter.com/RgUdByT8WH
参考にしたサイト
とても分かりやすくて助かりました。ありがとうございます!
今回の該当部分のコード
今回はとりあえず動くか確認したかったので参考にしたサイトの「Keyboard input」をそのまま使ってます。
バックグランド動作部分に関してはまた別で記事を作成するかも……?
// InputInjectorインスタンスを生成 InputInjector inputInjector = InputInjector.TryCreate(); // 一文字ずつ送信する処理 foreach (var letter in "hello") { // 送信するキー情報を作成する var info = new InjectedInputKeyboardInfo(); // VirtualKey Enumから一致する文字の値を設定する info.VirtualKey = (ushort)(VirtualKey)Enum.Parse(typeof(VirtualKey), letter.ToString(), true); // キー情報を配列で渡す。 inputInjector.InjectKeyboardInput(new[] { info }); // ここで待つことで同じ文字列が続いたときに認識されるようになるらしい?(未検証) await Task.Delay(100); }
今後やること
- キーボード以外のデバイスのHoloLens 2での動作を確認する。
- 通信部分を作って他のデバイスから動かしてみる。
- バックグラウンドタスクのトリガーをApplicationTriggerからSocketActivityTriggerにしてみる
などを予定しています。