プロデル入門の第23話です。今回はプロデルでアプリ操作を自動化する方法を紹介します。最近では定型処理を自動化するRPA(Robotic Process Automation)ツールが有名になってきています。プロデルには、Windowsデスクトップに特化した機能が豊富に用意されているので、自動的にアプリを起動したり、マウスやキーボードを操作するためのプログラムも作れます。
プロデルで自動化しよう
RPAでは、人が操作するPCのマウス操作やキーボード操作をプログラムで再現することで、アプリの操作を自動化します。操作が決まっている定型的なパソコンの操作を自動化することで、楽に確実に処理をこなせるようになります。
プロデルには、マウスやキーボードを操作する種類が用意されているのでRPAツールのような自動化を実現できます。さらに、プロデルにあるExcelの操作やCSVファイルの読み書き、GUI部品などプログラミング言語ならではの豊富な機能と組み合わせて、様々な操作を便利に自動化できます。
今回は自動化に使える、プロデルの次のような機能をサンプルと共に紹介します。
- アプリの起動, プロセス管理
- キーボード・マウス操作の再現
- ホットキー(ショートカットキー)
- 通知アイコン
- OCR
他のアプリを起動する
プロデルから他のアプリを起動できます。アプリや方法によって次の3つの方法があります。
- 実行可能ファイル(.exe)を起動する
- 関連付けられたファイルを開く
- Windowsストアアプリを起動する
実行可能ファイル(.exe)を起動する
実行可能ファイルを起動するには「起動する」手順を使います。起動する手順では、拡張子が.exeである実行可能ファイルがあるパスを指定します。
《実行可能ファイルのパス》を起動する
スタートメニューにあるインストールされたアプリのパスは、ショートカットのプロパティから調べられます。ショートカットは、スタートメニューのアプリのアイコン(Windows10の場合はタイル)を右クリックして「ファイルの場所」を選ぶと、確認できます。
さらにショートカットのプロパティを開き「リンク先」欄のパスをコピーします。
関連付けられたファイルを開く
関連付けされたファイル(そのアプリのアイコンになっているファイル)をそのアプリを起動して開くには「開く」手順を使います。
《ファイルパス》を開く
特定のファイルを開きたい場合には、ファイルの「プロパティ」でファイルパスを調べられます。「セキュリティ」タブの「オブジェクト名」の部分に完全なファイルパスが表示されていますので、この部分をコピーして「開く」手順に指定します。
Windowsストアアプリを起動する
Microsoft Storeからダウンロードできるアプリは、Windowsストアアプリです。Windowsストアアプリも「起動する」手順で起動できますが、Windowsストアアプリには実行可能ファイルが存在しないため、アイコンを右クリックしても「ファイルの場所を開く」の項目がありません。Windowsストアアプリでは、特別なパスを指定する必要があります。
Windowsストアアプリの場合、アプリのパスを「設定」の「アプリ」→「アプリの詳細設定」→「アプリ実行エイリアス」の一覧で調べられます。
「起動する」手順では「アプリ実行エイリアス」のアプリの名称の下にある灰色の文字列(xxx.exe)を指定します。
アプリ実行エイリアスの一覧にないストアアプリもあります。その場合、さらに特別なパスを調べて指定する必要があります。
例えば一覧にない「天気」アプリを起動するには、次のように指定します。
「msnweather:」を起動する
Windowsの標準的なアプリの特別なパスには、次のようなものがあります。
アプリ名 | 特別なパス(URIスキーム) |
---|---|
電卓 | calculator: |
カメラ | microsoft.windows.camera: |
マップ | bingmaps: |
天気 | msnweather: |
Microsoft Store | ms-windows-store: |
フォト | ms-photos: |
フォト(レガシー) | ms-photos-legacy: |
アラーム&クロック | ms-clock: |
OneNote | onenote: |
設定アプリ | ms-settings: |
なお、設定アプリでは「:」の後に項目の名前を指定すると、その設定画面を開けます。一覧はマイクロソフトのページに記載されています。
自分のPCにインストールされたアプリの特別なパスを調べるには、次のような調査プログラムをプロデルデザイナで実行します。実行すると、調査ウィンドウに、アプリ名とパスが辞書形式で表示されます。この結果から、パスの末尾に「:」を付けると、特別なパスとして指定できます。
辞書を作って結果とする
レポジトリキー名は「HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\Repository\Packages\」
レポジトリキー名のレジストリのキー一覧を項目にそれぞれ繰り返す
URLスキームキー名は「[レポジトリキー名][項目]\App\Capabilities\URLAssociations」
[レジストリ:URLスキームキー名が存在する]なら
結果(レジストリから「[レポジトリキー名][項目]\DisplayName」を取得したもの)=URLスキームキー名のレジストリの値一覧
そして
そして
結果を報告
キーボードの自動入力
プロデルでは、同じプログラムで作ったウィンドウはプログラムで直接操作できますが、他のアプリのウィンドウはプロデルからは自由に操作できません。他のアプリを操作するためには、キーボードの入力操作やマウスのクリック操作をシミュレートします。
「入力する」手順を使うと、指定した文字列をキーボードの入力として入力できます。次のプログラムでは、メモ帳を起動した後、3秒待って「こんにちは」という文字列を入力します。
「notepad.exe」を起動する
3秒待つ
「こんにちは」を入力する
入力する手順では、入力する文字を直接指定できます。キー表記を書くことでEnterキーやCtrlキーやShiftキーと組み合わせてショートカットキーを入力させられます。
主要なアプリは、キーボードだけでもほとんどの操作ができるように設計されています(キー操作が考慮されていないアプリもあります)。そのため「入力する」手順を使えば、他のアプリをほぼ操作できます。
プロセス
プロセスとは、起動しているプログラムの単位です。基本的にアプリを一つ起動すると、1つのプロセスが作られます。プロデルでは、他に起動しているプロセスを調べたり制御したりすることもできます。「プロセス」種類では、起動後にそのプロセスに関する情報(タイトルや終了したかどうか)などを調べられます。
「notepad.exe」を起動してメモ帳とする
メモ帳の名前を報告する
サンプル:バッチファイルが実行されるまで待つ
プロセスの「待つ」手順を使うと、アプリの処理が終わるまでプロデルプログラムの実行を待機させられます。
次のプログラムでは、あらかじめ用意されたバッチファイル(.bat)をコマンドプロンプト(ターミナル)で実行して、処理が終わるまで待機してから「終了しました」と表示します。
「batch.bat」を開いて待つ
「バッチが終了しました。」を表示する
バッチファイルの例「batch.bat」は、次のとおりです。メモ帳やプロデルデザイナの「ファイル」→「新規作成」→「テキストファイル」から、作成してください。
@echo off
SET INPUTSTR=
SET /P INPUTSTR="何か入力してください。
このようなサンプルを応用して、コマンドラインで処理するツールやバッチファイルとプロデルとを連携した便利なGUIツールを作ることもできます。
サンプル:外部アプリのウィンドウでキー入力する
特定のタイトルのウィンドウが表示された時に、指定したキーを入力するプログラムを作ってみます。例えば、パスワード入力を自動化するなどの用途に使えます。
次のプログラムでは「MyApp.exe」というアプリを起動して「ログイン」という画面が表示されたら、ユーザIDとパスワードを自動的に入力してエンターキーを押すという操作を、自動化します。
アプリを起動してウィンドウが表示されるまでには数秒時間がかかります。そのため、起動後すぐに「入力する」手順を呼び出さずに、目的のタイトル(ここでは「ログイン」)のウィンドウが表示されてから「入力する」手順を呼び出して、確実に操作できるように設計します。
ファイル名は「[今の位置]MyApp.exe」
ファイル名を起動して対象プロセスとする
繰り返す
起動中プロセス一覧を要素へそれぞれ繰り返す
要素のタイトルが「ログイン」なら
選択プロセスは、要素
繰り返しから抜け出す
そして
そして
選択プロセスが無でなければ繰り返しから抜け出す
0.1秒待つ
対象プロセスの起動中が○でなければ終了する
そして
選択プロセスへ「id{Tab}password{Tab}{Enter}」を入力する
テスト用のMyApp.exeのプログラムは、次の通りです。「入力する」に指定する入力内容は、自動入力したい画面に応じて、変えられます。別のアプリに応用する場合には、実際にキーボードだけでそのアプリが操作できるかどうかを試してから「入力する」手順に指定する文字列を組み立ていきましょう。
メイン画面を表示する
待機する
メイン画面とは
ウィンドウを継承する
はじめの手順
初期化する
ーー貼り付けた部品に対する操作をここに書きます
終わり
初期化する手順
ーー自動生成された手順です。ここに書き加えたプログラムは消える可能性があります
初期化開始する
この実質大きさは{428,272}
この内容は「ログイン」
この文字色は「標準の文字」
テキスト1というテキストを作る
その位置と大きさは{58,58,278,25}
テキスト2というテキストを作る
その位置と大きさは{58,123,278,25}
そのパスワード文字は「●」
そのパスワード表示は○
ボタン1というボタンを作る
その位置と大きさは{139,186,112,34}
その内容は「ログイン」
その文字色は「標準の文字」
初期化終了する
この設計スケール比率は{144,144}
終わり
ボタン1がクリックされた時の手順
「ログイン成功」と表示する
終わり
終わり
マウスの自動操作
マウスで操作する必要がある場合には「マウスカーソル」種類を使います。マウスカーソル種類では、特定の座標でクリックしたりやダブルクリックしたりするなどの操作や、ボタンを押して離すドラッグ操作もできます。
マウスカーソルでは、次のようなマウス操作をプログラムで操作できます。
手順 | 説明 |
---|---|
マウスカーソルを【座標】へ移動する | マウスカーソルを画面上の指定した座標に移動する |
マウスカーソルを【外部ウィンドウ】で【座標】へ移動する | マウスカーソルを指定したウィンドウの指定した座標に移動する |
マウスカーソルに〈【座標】を〉クリックさせる | 画面上の指定した座標でクリックする |
マウスカーソルに〈【座標】を〉ダブルクリックさせる | 画面上の指定した座標でダブルクリックする |
マウスカーソルに〈【座標】を〉右クリックさせる | 画面上の指定した座標で右クリックする |
マウスカーソルに〈{左ボタン,右ボタン,中央ボタン}で〉〈【座標】を〉押させる | 画面上の指定した座標でマウスボタンを押したままにする |
マウスカーソルに〈{左ボタン,右ボタン,中央ボタン}で〉〈【座標】から〉離れさせる | 画面上の指定した座標でマウスボタンを離す |
マウスカーソルで【移動量:整数】だけホイール回転させる | マウスホイールを移動量だけ前後にホイールさせる |
マウスカーソルで【移動量:整数】だけチルトさせる | マウスホイールを移動量だけ左右にチルトさせる |
「マウスカーソル」種類を使えば、他のアプリのウィンドウの特定の場所をクリックしたり移動したりする操作をプログラムで再現できます。
サンプル:マウス操作を再現してペイントに絵を描く
次のプログラムでは、ペイントを起動し、マウス操作を再現して、図形を描きます。白紙に線を描くには「カーソルを移動してマウスボタンを押して、マウスカーソルの座標を変えてボタンを離す」という操作を再現します。
なお「ペイント」アプリのバージョンや、使用しているPCのウィンドウサイズなどで、座標が変わることがあるため、うまく動かない時には、座標を変えて試してみてください。
ファイル名は「mspaint.exe」
ファイル名を起動して対象プロセスとする
繰り返す
起動中プロセス一覧を要素へそれぞれ繰り返す
要素のタイトルが「ペイント」で終われば
選択プロセスは、要素
繰り返しから抜け出す
そして
そして
選択プロセスが無でなければ繰り返しから抜け出す
0.1秒待つ
対象プロセスの起動中が○でなければ終了する
そして
1秒待つ
ペイント画面は、選択プロセスのメイン外部ウィンドウ
ペイント画面をアクティブ化する
対象サイズは、ペイント画面の大きさ
マウスカーソルをペイント画面で{対象サイズの幅/2-150,対象サイズの高さ/2-100}へ移動する
マウスカーソルに左ボタンで押させる
マウスカーソルをペイント画面で{対象サイズの幅/2+150,対象サイズの高さ/2+200}へ移動する
マウスカーソルに左ボタンで離させる
マウスカーソルをペイント画面で{対象サイズの幅/2+150,対象サイズの高さ/2-100}へ移動する
マウスカーソルに左ボタンで押させる
マウスカーソルをペイント画面で{対象サイズの幅/2-150,対象サイズの高さ/2+200}へ移動する
マウスカーソルに左ボタンで離させる
ホットキー
「ホットキー」種類を使うと、登録したショートカットキーを押した時にイベント手順を発生させられます。ホットキーは、別のアプリを操作している時でも有効なので、どの画面でもショートカットキーを押せば呼び出せます。
ショートカットキーは、英数字キーとCtrlキー, Shiftキー, Altキー, Windowsキーの組み合わせを設定できます。「登録する」手順を呼ぶと、ショートカットキーを押したときにイベント手順が発生します。登録する時に、すでに同じショートカットキーが設定されている場合には登録できません。
ホットキーを活用して、例えば、アプリを常駐している状態で特定のキーを押して、何らかの自動処理を実行するといったことが実現できます。
タスクトレイ(通知領域)のアイコン
画面右下のWindowsタスクバーの日付時刻が表示されている部分を「通知領域」や「タスクトレイ」と呼びます。常駐アプリでは、この部分に表示されたアイコンから操作できると便利です。
「通知アイコン」種類を作ると、通知領域にアイコンを追加できます。通知領域のアイコンは、クリックによってメニューを表示させたり、通知メッセージを表示できます。
サンプル:通知領域に常駐するアプリを作る
ホットキーと通知アイコンを組み合わせて、常駐アプリを作ってみます。このサンプルでは、Ctrl+Shift+Cキーを押すことで電卓を起動するようにします。アプリを終了するには、通知アイコンを右クリックして「閉じる」をクリックします。
「shell32.dll」の208番目からアイコン画像を抽出して通知アイコン画像とする
通知アイコン1という通知アイコンを作る
そのアイコンは、通知アイコン画像
そのタイトルは「プロデルの通知アイコン」
メニュー1というコンテキストメニューを作る
メニュー1にメニュー項目を追加する
その内容は「表示する」
メニュー1に区切り線を追加する
メニュー1にメニュー項目を追加する
その内容は「閉じる」
そのクリックされた時の手順は、閉じる
通知アイコン1のメニューは、メニュー1
ホットキー1というホットキーを作る
ホットキー1のキーは「C」
ホットキー1のシフトキーは○
ホットキー1のコントロールキーは○
ホットキー1を登録する
通知アイコン1を表示する
待機する
閉じる手順
通知アイコン1を隠す
終了する
終わり
ホットキー1が押された時の手順
「calc.exe」を起動する
終わり
ファイルやフォルダを監視する
「ファイル監視器」種類を使うと、指定したファイルやフォルダに対する変更を監視できます。例えば、フォルダにファイルを作成・コピーしたことや、特定のファイルが変更・削除された時に、何かの処理を実行できます。
サンプル:OCRツールを作る
OCRとは画像を解析してテキスト情報を抽出する技術です。WindowsにはOCR機能が用意されているので、プロデルを使って画像からテキストを抽出できます。
このサンプルでは、指定したフォルダを監視して、そのフォルダに画像ファイルがコピーされた時に、OCRによってテキストを抽出する常駐プログラムを作ってみます。
例えば、このツールを使えば、画像ファイルになった名刺や申込書などをフォルダに入れるだけで、そのテキスト情報を自動的にCSVファイルへ記録できるので、入力操作が楽になります。
プラグインの利用方法
プロデルのプラグインは、dllファイルなどをプロデルプログラムと同じフォルダ、またはプロデルデザイナがインストールされたフォルダの「plugins」フォルダにコピーすることで利用できます。
OCR機能は「イメージ処理プラグイン」を使います。プラグインはReleasesのページからダウンロードできます。
Releasesのページからダウンロードしたzipファイルを解凍します。そして.dllファイル(Produire.WRT.Imaging.dll)をプロデルプログラムと同じフォルダにコピーしておきます。
画像をフォルダにコピーしてOCRしてみる
では、イメージ処理プラグインを使ったプログラムを作ってみます。メイン画面では、フォルダを選択して[監視する]をクリックすると、フォルダを監視するようにします。
監視しているフォルダに.jpg, .png, .bmpのいずれかの画像ファイルを入れた時に、自動的に「OCR」種類の「読み取る」手順を実行して、画像を解析します。解析で読み取ったテキストをdata.csvファイルへ一行分で書き込みます。複数の画像ファイルを入れた場合には、画像ファイルひとつに付き一行分のデータとしてCSVファイルに書き込みます。
「Produire.WRT.Imaging.dll」を利用する
収集データというデータ表を作る
「data.csv」が存在すれば
収集データへ「data.csv」から読み込む
そして
メイン画面を表示する
待機する
メイン画面とは
ウィンドウを継承する
はじめの手順
初期化する
ーー貼り付けた部品に対する操作をここに書きます
監視器というファイル監視器を作る
監視器の対象ファイルは「*.*」
テキスト1の内容は「[今の位置]input\」
終わり
初期化する手順
ーー自動生成された手順です。ここに書き加えたプログラムは消える可能性があります
初期化開始する
この実質大きさは{461,167}
この内容は「メイン画面」
この文字色は「標準の文字」
選択ボタンというボタンを作る
その位置と大きさは{316,35,112,34}
その内容は「選択」
その移動順は2
その文字色は「標準の文字」
テキスト1というテキストを作る
その位置と大きさは{34,40,276,25}
その移動順は1
監視ボタンというボタンを作る
その位置と大きさは{143,98,112,34}
その内容は「監視する」
その移動順は3
その文字色は「標準の文字」
初期化終了する
この設計スケール比率は{144,144}
終わり
監視ボタンがクリックされた時の手順
監視器の監視中なら
監視器の監視中は×
監視ボタンの内容は「監視する」
でなければ
監視器の対象フォルダは、テキスト1の内容
監視器の監視中は○
監視ボタンの内容は「監視停止」
そして
終わり
選択ボタンがクリックされた時の手順
フォルダ選択画面を表示しなければ返す
フォルダ名は、フォルダ選択画面のフォルダ名
テキスト1の内容は、フォルダ名
終わり
監視器が作成を検知した時の手順
ファイル名は「[監視器の対象フォルダ]\[イベントの検知名前]」
拡張子は、ファイル名の拡張子だけの小文字
{「jpg」,「png」,「bmp」}から拡張子を完全一致で探したものの個数が0より大きければ
【内容】は、OCRでファイル名を読み取る
収集データに内容の行区切りを追加する
収集データを「data.csv」へ保存する
そして
終わり
終わり
では実行して、動画のように操作してみます。
このプログラムを改良して、画像ファイルの必要部分だけを切り取ったり、読み取ったテキストを正規表現で必要な部分だけ取り出すなどして、さらに効率化できるかもしれません。
まとめ
今回は、プロデルでパソコン操作を自動化するプログラムを作ってみました。
日本語プログラミング言語のメリットは、書いたプログラムを読み返した時に、日本語なので、何をしていたか、すぐに思い出せることです。特に、定型処理やバッチ処理は、一度書いてしまうと開く機会が少ないプログラムです。時間が経ってメンテナンスや改良するときに、プログラムが日本語であることの分かりやすさは、日本語を使う人の密かなメリットだと思います。私も、定型処理やバッチ処理などにプロデルを一番活用しているかもしれません。
本連載や本ブログでは、自動化に使えるプロデルを活用した色々なプログラムの作り方を紹介していますので、ぜひブログ内検索してみてください。
※当ブログの記事の著作権はゆうとにあります。プロデルに関係が無い目的で、文章や図表,プログラムを複製, 改変, 移植して掲載することを堅く禁止します