HoloLens 2でInputInjectorクラスを使ってみる(キーボード編)

なにがしたいのか

HoloLens 2のプログラムからキー入力を送信したい。

どうやってする?

InputInjectorクラスを使うと実現できそう!

docs.microsoft.com

InputInjectorクラスではなにができる?

プログラムから生成されたキーボード、マウス、ゲームパッド、ペン、タッチデバイスの入力をプログラムから送信できる。

やってみる

他のアプリケーションにキー入力を送りたいため、今回はアウトプロセスバックグラウンドタスクから呼び出してみる。

(アウトプロセスバックグラウンドタスクやる意味は単に使えるようになったので使ってみたかったから)

動作

ボタンを押下するとバックグラウンドタスクが立ち上がり、4秒後にキー入力「hello」を送る。

参考にしたサイト

とても分かりやすくて助かりました。ありがとうございます!

blog.mzikmund.com

今回の該当部分のコード

今回はとりあえず動くか確認したかったので参考にしたサイトの「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にしてみる

などを予定しています。