UWSC を使えば Windows 画面上で動作する Windows マクロを作ることができます。
画像をクリックする操作のプログラミングコードは会計事務所の仕事で使えます。
会計ソフトを自動操作したい場合などにです。
さて、画像をクリックする操作は不安定なところがあり、プログラミングしたら動作を試して微調整しなければなりません(トライアンドエラーの部分があります)。
今日は、SLEEP 関数を使って画像が表示されるまでの時間を稼ぐ方法を実例をあげながら紹介します。
1、自動化する操作の例 Powerpoint での図形挿入
Powerpoint で「矢印の図形」をスライド上に挿入するマクロを UWSC で作ってみます。
Powerpoint のファイルを開いた状態で実行するマクロになります。
操作の手順
「挿入」タブから「図形」を選択して、「矢印の図形」のアイコンを選択してスライド上に配置するという操作を一例としてあげます。
「挿入」タブ↓
「図形」を選択↓
「矢印の図形」のアイコンを選択↓
スライド上に配置↓
これらの操作を UWSC でプログラミングしてマクロ化しますね。
2、UWSC のプログラミングコード
全プログラミングコード
まず、全部のプログラミングコードを示しておきます。
メモ帳を開き、形式を「.uws」として保存したファイルの中に以下のコードを書き込みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
IFB CHKIMG("sounyu.bmp") BTN(LEFT,CLICK, G_IMG_X, G_IMG_Y,100) BTN(LEFT,CLICK, G_IMG_X, G_IMG_Y,100) ELSE MSGBOX("「挿入」ボタンの画像認識に失敗しました。") EXITEXIT ENDIF SLEEP(1) IFB CHKIMG("zukei.bmp") BTN(LEFT,CLICK, G_IMG_X, G_IMG_Y,100) ELSE MSGBOX("「図形」ボタンの画像認識に失敗しました。") EXITEXIT ENDIF SLEEP(1) IFB CHKIMG("yajirushi.bmp") BTN(LEFT,CLICK, G_IMG_X, G_IMG_Y,100) BTN(LEFT,CLICK, G_IMG_X + 500, G_IMG_Y + 500,100) ELSE MSGBOX("「図形」ボタンの画像認識に失敗しました。") EXITEXIT ENDIF |
コード説明
全体の構成を大きく言うと、IFB を使った条件分岐を3回(クリックする画像の数だけ)行っています。
IFB を使った条件分岐
IFB を使った条件分岐は以下のように記述します。
————————————-
IFB 条件
処理1
ELSE
処理2
ENDIF
————————————-
「条件に当てはまる場合 処理1を行い、当てはまらない場合 処理2を行う」という条件分岐になります。
CHKIMG 関数
さて、上記の条件には CHKIMG 関数を使っています。
指定した「画像ファイル」が UWS ファイルと同じフォルダ内に存在するかチェックする関数です。
詳しくはこちらの記事を参考にして下さい↓
3つの IFB 文の中で、それぞれ Powerpoint 操作のための画像を探しているのです。
1つ目の IF 文の中にあるのは
CHKIMG(“sounyu.bmp”)
1つ目のIFB 文↓
1 2 3 4 5 6 7 8 9 10 11 |
IFB CHKIMG("sounyu.bmp") BTN(LEFT,CLICK, G_IMG_X, G_IMG_Y,100) BTN(LEFT,CLICK, G_IMG_X, G_IMG_Y,100) ELSE MSGBOX("「挿入」ボタンの画像認識に失敗しました。") EXITEXIT ENDIF |
画像ファイル「sounyu.bmp」は、「挿入」タブの部分を切り取った画像です。
「挿入」タブ↓
上の青で囲った部分をペイントでトリムして24ビットの bmp ファイルとして保存しています。
1つ目のIFB 文の中では画像「sounyu.bmp」を探して見つかれば、左クリックを2回しています。
1回だけだと Powerpoint がアクティブになるだけで画像をクリックできないから2回にしています。
もし画像が見つからなければ、アラート(「挿入」ボタンの画像認識に失敗しました。)を出してコードを終了しています。
2つ目の IF 文の中にあるのは
CHKIMG(“zukei.bmp”)
2つ目の IF 文↓
1 2 3 4 5 6 7 8 9 10 |
IFB CHKIMG("zukei.bmp") BTN(LEFT,CLICK, G_IMG_X, G_IMG_Y,100) ELSE MSGBOX("「図形」ボタンの画像認識に失敗しました。") EXITEXIT ENDIF |
画像ファイル「zukei.bmp」は、「挿入」タブの中の「図形」のアイコンを切り取った画像です。
「図形」のアイコン
トリムしたものを24ビットの bmp ファイル「zukei.bmp」として保存↓
2つ目のIFB 文の中では画像「zukei.bmp」を探して見つかれば、左クリックを1回しています。
もし画像が見つからなければ、アラートを出してコードを終了しています。
3つ目の IF 文の中にあるのは
CHKIMG(“yajirushi.bmp”)
3つ目のIF文↓
1 2 3 4 5 6 7 8 9 10 11 12 |
IFB CHKIMG("yajirushi.bmp") BTN(LEFT,CLICK, G_IMG_X, G_IMG_Y,100) BTN(LEFT,CLICK, G_IMG_X + 500, G_IMG_Y + 500,100) ELSE MSGBOX("「図形」ボタンの画像認識に失敗しました。") EXITEXIT ENDIF |
画像ファイル「yajirushi.bmp」は、実際に挿入する「矢印の図形」のアイコンを切り取った画像です。
「矢印の図形」のアイコン↓
トリムしたものを24ビットの bmp ファイル「yajirushi.bmp」として保存↓
3つ目のIFB 文の中では画像「yajirushi.bmp」を探して見つかれば、その画像の上で左クリックを1回して選択しています。
そして、その位置から少し右下のスライド上に配置するようにしています。
もし画像が見つからなければ、アラートを出してコードを終了しています。
SLEEP 関数
さて、色々書きましたが今回紹介したいのは SLEEP 関数です。
3つの IFB 文の間に「SLEEP(1)」を入れています。
このように↓
———————
1つ目のIFB 文
SLEEP(1)
2つ目のIFB 文
SLEEP(1)
3つ目のIFB 文
———————
さて、なぜこのようにするのか? 順を追って説明しますね。
SLEEP 関数とは、実行中の UWSC コードを指定した秒数だけ停止するための関数です。
以下のように記述します。
IFB 文の間に SLEEP 関数を入れる理由は、次の画像がちゃんと表示されるまでコードをストップしないと、次の画像をクリックできないからです。
1つ目のIFB 文では、画像「sounyu.bmp」を探し出してクリックします。
「挿入」タブ
すると次は挿入タブのリボンが開くので、その中から画像「zukei.bmp」を探し出してクリックするわけです。
「図形」↓
しかし、「挿入」タブを選択してからリボンが開くまでにはわずかですが時間がかかります。
そのわずかな時間の間に UWSC は次の命令(「zukei.bmp」が見つかればクリック)を実行しようとします。
そうなると、画面上に挿入タブのリボンが開ききる前にコードが2つ目のIFB 文に進んでしまいます。
そして、画像「zukei.bmp」を探し出そうとするのですが、探し出せません。
何しろ画面上に表示されていないわけですから。
そこで、挿入タブのリボンがちゃんと開くまでコードの実行を止めるために SLEEP 関数を使って一時的に処理を止めているのです。
次の「図形」アイコンの選択も同じです。
今回 1秒止めるために SLEEP(1)としましたが、何秒が適しているかは操作するアプリケーションによっても PC によっても異なりますので、その都度トライアンドエラーになります。
自分の PC で操作する Powerpoint は1秒で何とかなりました。
SLEEP 関数を入れない場合と入れた場合の動作の違いを動画で撮りましたので確認下さい。
UWSC の実行の仕方はこちらの記事を参考にして下さい↓
SLEEP 関数を入れない場合画像認識に失敗します↓
SLEEP 関数を入れる場合最後まで狙い通りに動作が進みます↓
3、まとめ
UWSC で画像が表示されるまでの時間を SLEEP 関数で稼いで正しくクリックできるようにする方法について説明しました。
UWSC で SLEEP 関数はけっこう出番が多いと思います。
トライアンドエラーも多いですが、自分の環境に合ったコードを1回作れれば後々楽できますので、楽しみながらコードを作って頂きたいです。