uibot:みんなのためのロボット!
以前、mfc、wtl、winform、wpfなどを含むwindowsソフトウェアインターフェイスを開発するためのフレームワークは、microsoftによって提供されました。microsoftは自動化のインターフェイスを十分提供することができます。近年、ソフトウェアインターフェイスをより魅力的で使いやすくするために、多くのベンダーと開発チームは、独自のwindowsソフトウェアインターフェイスを開発するためのフレームワークを考案しました。そのフレームワークはdirectuiと呼ばれます。そのフレームワークのインターフェース要素はすべて描かれていて、人間の目で見ることができますが、オペレーティングシステムとその他のプログラムいずれもこのインターフェース要素がどこにあるか分かりません。一部のdirectuiフレームワークは、インターフェイス要素を判断する外部インターフェイスを提供しています。他のプログラム(uibotを含む)は当然、そのインターフェイス要素の場所が分かりません46。
実際、uibot creatorとuibot workerのインターフェイスは、[電子(electron)](https://electronjs.org/)と呼ばれるdirectuiフレームワークを使って開発されたものです。 electronはインターフェース要素にルックアップインターフェースを提供しますが、デフォルトではすべてのリリースが閉じられています。そこで、すでに気づいているかもしれませんが、uibotのインターフェイス要素は、uibot自身も含めてどの市場のrpaプラットフォームでも見つかりません。
wechatのwindowsクライアントのようなdirectuiに基づいたソフトウェアがあります。 tencent(wechatの会社)がwechatのwindowsクライアントを公開していないため、wechatがどのようなdirectuiフレームワークを使っているかを知ることはできません。しかし、このフレームワークはインターフェイス要素のためのインターフェイスを提供しないため、市場のどのrpaプラットフォームでも利用できないことを判明しました。さらに、wechatはブラウザに基づいてそのwebバージョンを提供しています。それによってインターフェイス要素を取得することができて、rpaプロセスでの使用をサポートします。
ゲームのインターフェイスは美しさと個性を強調しているので、ほとんどのゲームインターフェイス要素は「描かれている(drawn)」という点でdirectuiに似ています。 また、そのインターフェイスも通常、インターフェイス47を提供しません。その代わりに、さまざまなインターフェイス要素の位置を私たちに知らせます。directuiに基づいたソフトウェアと比べれば、ゲームインターフェイスはすばやく変化していて適時性に対する要求が高いです。一般に、rpaプラットフォームはゲームに対して最適化していないため、このプラットフォームでうまく機能できません。
ゲームで自動操作を使いたい場合、キーストロークを使用することをお勧めします。キーストロークは、ゲームのために特別に設計されています。そのゲームはビルトインで、シングルポイントカラーアライメント、マルチポイントカラーアライメント、イメージルックアップなどのゲーム固有のインターフェイスルックアップが備わっています。
[前の章] で紹介した[インターフェイス要素]は、コマンドとターゲットと一緒に使用しますが、uibotではターゲットなしコマンドを使用します。 次の図に示すように、赤いボックスはターゲットのあるコマンドを表し、青いボックスはターゲットなしコマンドを表します。
! [objective and goalless command] (imgstarget/1.png){width="40%"}
ターゲットのないwindowsソフトウェアに出会う場合、ターゲットコマンドを使用することはできませんが、ターゲットなしコマンドを使用することができます。図にターゲットのないこれらのコマンドの中で、最も重要なのは「シミュレート移動(simulated movement)」です。 シミュレート移動の中で、コマンド内の座標点を指定する必要があるため、コマンドが実行されるとマウスポインターが同じ点に移動します。移動した後、「シミュレートクリック(simulated click)」コマンドを使用して、左クリックボタンをシミュレートして、ボタンを適切に押すことができます。また、これを使って入力ボックスにフォーカスを正しく設定して、「テキスト入力(enter text)」コマンドを使用して、フォーカスのところの入力ボックスにテキストの段落を入力します。たとえば、座標がx:200、y:300の入力ボックスがあります。次に、シミュレート移動で、座標をx:200、y:300に設定する必要があります。次に、左ボタンを押し、フォーカスを設定します。最後に、いつもの入力のようにテキストを再入力します。そうしないと、「テキスト入力」を直接に使用すれば、他の入力ボックスに入力してしまう可能性が高いです。
これから、windowsオペレーティングシステムの画面座標を説明する必要があります。すでに画面座標がわかっている場合は、このセクションを飛ばしてもいいです。
[ここをクリックしてスキップしてください] (次の適切なセクションにジャンプすることができます。ユーザーは自分で検索する必要がありません)
windowsのオペレーティングシステムでは、画面上の各ポイントは、xとyという2つの整数で構成される唯一の座標があります。たとえば座標x:200、y:300は、このポイントのx値が200で、y値が300であることを意味します。画面の左49側から数えると、xは0から始まります(左から右へ0、1、2、3 ...)。yは画面の上から下へ(0、1、2、3 ...)計算されます。 したがって、座標x:200、y:300の点は大体、下図に示す赤い円の位置にあります:
xとyの2つの整数値があるだけで、画面上の点の位置を計算することができます。uibotには、画面上のポイントの位置を取得し、その変数を出力するコマンドがあります。どのようにx値とy値を一つの変数に保存しますか?uibotで使用したwebspherecript言語の[言語リファレンス(language reference)]から学んだように、webspherecriptには複数の値を保持できる「辞書(dictionary)」というデータタイプがあります。そのため、uibotがポイントの位置を出力するとき、特定の辞書タイプを介してその値a変数に出力します。例えば、この変数は「pnt」と呼ばれる場合、「pnt[ "x" ]”and “pnt[ "y" ]」を使用してxとyの値を取得することができます。
画面上の固定位置でインターフェイス要素であるターゲットなしコマンドを探すのなら、シミュレーション操作を正規化することができます。 通常、windowsがマルチシステムであり、各windowsの位置をドラッグすることができます。それにより、windowsの中のインターフェイス要素の位置が変わることを招きます。 また、wechatなどのようなソフトウェアでは、連絡先の位置は固定されていません。連絡時間の最も新しい前50位を示し、更新されるたびにその位置も変わります。
したがって、uibotでは、固定座標をそのまま記述することをお勧めしません。なぜならば、それがいつも変わっているので、深く考慮することはできません。通常、ターゲットなしコマンドを使用する場合、そのターゲットの特徴を通じてインターフェイス要素の座標が見つかれるように、他のコマンドと一緒に使用する必要があります。そして、変数として見つかった座標を取得し、それをターゲットなしでコマンドに渡します。
uibotでは、非オブジェクトコマンドの最高なパートナーはイメージコマンド(image command)です。