見出し画像

意外と違う「グローバルキー送信」と「グローバルキーイベント送信」は何が違うのか?!

どうも、Bearです。気温がどんどんと高くなり暑くてたまらない今日この頃ですが、生成AIへの関心もどんどん高まって熱くなってきてるなというのも感じる今日この頃、皆さまいかがお過ごしでしょうか?

しかし生成AIが出力した結果もその内容を受けて何か実行する時があり、その時にはマウスとキーボードを使うことがあるかと思います。今回はそんなマウス操作/キーボード操作を実行する「グローバルキー送信」と「グローバルキーイベント送信」のお話です。

歩かず移動し、マウス/キーボードを使わずPC操作する日も来るのかな・・・

グローバルキー送信とグローバルキーイベント送信の使いどころと使い方

Blue Prismで操作したい対象アプリケーションによっては、キーボードの特定のキー操作によって画面が次に遷移したり、実際にマウスクリックすることでボタンが押せたり、といったことがあります。そのような時に使うのが、「グローバルキー送信」と「グローバルキーイベント送信」になります。構造解析が細かな中までは出来ないようなケースでも、枠部分をマウスでクリックしてカーソルを当て、所定の回数キー操作してCtrl+Cで情報取る、なんて使いどころもあるかなと。

使いどころや使い方については個人の方やパートナー様も解説してくれている記事が検索すると出てきますのでぜひ [Blue Prism グローバルキー送信] で検索してみてください。記事を書いてくださった皆様、ありがとうございます!

グローバルキー送信とグローバルキーイベント送信の違い

ではこの記事の本題である違いについての話に入っていこうかと思います。
結論から言うと、公式ドキュメントに書いてある!です。でも、英語版しかなくすみません。。。

https://portal.blueprism.com/system/files/2018-02/Guide%20to%20Send%20Keys%20and%20Send%20Key%20Events.pdf

グローバルキー送信とグローバルキーイベント送信、名前は似ているけど記述の仕方や動作がちょっと違うのは、
グローバルキー送信:「SendKeys.Send(String) メソッド」を使用している
グローバルキーイベント送信:「Keys 列挙型」を使用している
からになります。

グローバルキー送信の技術詳細をリンクしているのは、公式ドキュメントのP7中段辺りで以下になります。

一方でグローバルキーイベント送信の技術詳細をリンクしているのは、公式ドキュメントP14上段で以下になります。

名前はイベントの有り無しみたいな違いですが、裏側は別なものを使っているので記述方法や動作が違うのですね。

どっちを使えばいいの?

明確に裏側が違うのね、というのは分かったけどどっちを使うのが良いの?というのが次の疑問になるかなと思います。それについても公式ドキュメントのP1に以下のように記載しています。

・グローバルキー送信
キー送信はほとんどのアプリケーションで機能するので、キーイベント送信の前に試すべきである。これは、アクティブなアプリケーションにキー入力を送信する上位インターフェイスです。

・グローバルキーイベント送信
キーイベント送信はすべてのアプリケーションで機能し、Citrixアプリケーションで推奨されるテキスト送信方法です。これは、オペレーティングシステムのキーボードでのキー入力を模倣する下位レベルのインターフェイスです。

公式ドキュメントを機械翻訳

と言うことで、まずはグローバルキー送信を使っていただき、うまく行かないなということがあればグローバルキーイベント送信を使ってみてください。

キー送信における小技

最後に一つだけ小技的なものを紹介させてください。

キー送信したい要素の識別をUIオートメーションモードで行っていると、キー送信時に再度その要素の識別を行ってからキー送信を行うために少し遅かったりする場合があるかと思います。
そのようなことがあるので、キー送信時の要素をアプリケーションエクスプローラのツリー一番上にするとサクッとキー送信が始まって動作が早くなります。ただし、キー送信前にちゃんと対象に入力が出来るようにフォーカスを入れたりするのは行ってください。以下のような感じです。

キー送信時にツリーの一番上を指定

以上、キー送信についてでした。