プログラム機能
条件判断機能を持つコマンド群
状況に応じて処理を変化させることが出来ます。
一時停止してデバッグしたい時などは、
ブレークポイントの設定の項を参照してください。
手動マウス停止: マウス移動による停止をプログラムで指定
手動停止オン:マウス移動による停止を強制
有効にする
手動停止オフ:マウス移動による停止を強制
無効にする
いずれかのコマンドが発行された以降は、[
設定]の[
手動マウス操作による停止]は
無視される
条件分岐: If〜Else-If〜Else〜End-If
条件式が「
真」か「
偽」かで処理ステップを変更
基本的な記述方法
If 条件式
条件式が「真」の場合の処理
Else-If
Ifの条件式が「偽」の場合に、再度、別の条件式を判定
Else
条件式が「偽」の場合の処理
End-If
下の例では、入力した値により、2段階/9種類に分類してメッセージを表示します。
入力された値の応じて
7以上 → 003行目
9以上 → 004行目
8以上 → 006行目
以外 → 008行目
4以上 → 011行目
6以上 → 012行目
5以上 → 014行目
以外 → 016行目
以外 → 019行目
3以上 → 020行目
2以上 → 022行目
以外 → 024行目
のように、それぞれ実行されます。
例:
条件分岐(If〜Else-If〜Else〜Endif)
001 INIT
002 INPUT_BOX //数値入力
003 If %FuncRet% >= 7
004 If %FuncRet% >= 9
005 MSG_BOX
006 Else-If %FuncRet% >= 8
007 MSG_BOX
008 Else
009 MSG_BOX
010 End-If
011 Else-If %FuncRet% >=4
012 If %FuncRet% >= 6
013 MSG_BOX
014 Else-If %FuncRet% >= 5
015 MSG_BOX
016 Else
017 MSG_BOX
018 End-If
019 Else
020 If %FuncRet% >= 3
021 MSG_BOX
022 Else-If %FuncRet% >= 2
023 MSG_BOX
024 Else
025 MSG_BOX
026 End-If
027 End-If
補足
入力中の文法チェックは特に行っていません。
If および Else の次の行から自動でインデントされるので、そのインデント数で階層を確認してください。
サブルーチンを
Call(呼び出す)。
サブルーチンの先頭には
ラベルを定義しておき、このラベル名で
Callします。
呼び元に戻るには
Return を発行。呼び元の次の行に実行行が移りまる。
次の例は、メインルーチンから、2つのサブルーチンを呼び出しています。
この場合の、実行される順序は下記の順
004 → 014 → 015 → 016 → 005 → 010 → 011 → 012 → 006
001 !
002 !メインルーチン
003 !
004 Call // subB コール subB
005 Call // subA コール subA
006 QUIT // 終了
007 !
008 !サブルーチン
009 ! --------------------
010 subA //サブルーチンA
011 MSG_BOX サブルーチン subA
012 Return
013 !
014 subB //サブルーチンB
015 MSG_BOX SubRoutine subB
016 Return
階層化サブルーチン
サブルーチンからサブルーチンを呼んでいくのは100階層まで。
100階層を超えると「スタックオーバーフロー」のメッセージを表示して終了
パラメータ と 返却値
サブルーチンにはパラメータを渡すことができ、関数としても使用出来る。
パラメータは、カンマ区切りで表記する。
最大20個まで指定可で、変数でも使用可。
カンマを含む場合は、「"」で括る。
サブルーチン側では、変数 %user_arg1%〜%user_arg20% で参照。
Returnでの返却値(変数使用可)は、呼び元で、変数 %FuncRet% で参照する。
条件付サブルーチンコール: CallIf / Return 使用例:条件付サブルーチンコール
条件によりコールするサブルーチンを変える。
条件式が「
真」の場合と「
偽」の場合でコールされるサブルーチンが異なる。以下サンプル
001 INIT
002 ! -----------------------
003 ! CallIf サンプル
004 ! -----------------------
005 Dim Result
006 !
007 ! 入力値が5より大きいかでCALL先変更
008 !
009 INPUT_BOX 154 154 609 318 整数を入力
010 Jump IsNumeric(%FuncRet%) = 0 QUIT
011 Jump //空白 %funcret% = "" QUIT
013 !
014 CallIf %funcret% > 5SubA SubB
015 !
016 QUIT QUIT //終了
017 !
018
019 ! 以下サブルーチン群
020 !
021 SubA //>5
022 MSG_BOX 5より大きい
023 Return
024 SubB //以外
025 MSG_BOX 5以下
026 Return |
|
上記の条件式 %funcret% > 5 が
「真」の場合 SubA
偽」の場合 SubB
がコールされる |
値別サブルーチンコール: Case-Call( Case-Jump )/ Return
使用例:「sample58(簡易サウンドプレーヤー).dat」を参照
評価式の値によりコールするサブルーチンを変更する
値(式)の評価は
上から順に行われ、真の場合に指定ラベルをコールする。
また「
真」の場合は。その「真」のサブルーチンからリターン後は
本処理は終了し、次のステップに移行する。
値が「
*」でラベルが指定されている場合は、
無条件に指定ラベルをコールする。
最大
40個までの値判定でコールするサブルーチンを指定可能
下記は同梱サンプル「
sample(簡易サウンドレコーダー).dat」の例
変数の値を10種類の方式で判定し、「真」の場合に指定のラベルをコール
|
|
行の入替:▲▼ボタンで上または下の行と入れ替え
スクロール:12行目以下を見る場合は、右端の垂直スクロールバーを使用 |
001 INIT
002 ! ----------------------------------
003 ! 簡易サウンドプレーヤー
004 !
005 ! 再生-一時停止-再開-停止
006 ! ユーザーフォームを使用して動的に制御
007 !
008 ! ユーザーフォームはコントロールを自由に
009 ! 個数制限無し/色/フォント/サイズ 指定可
010 ! ----------------------------------
011 Dim // ユーザーフォームタイトル
012 Dim // イベント:コントロール名
013 Dim // イベント:詳細1
014 Dim // イベント:詳細2
015 Dim // ループスイッチ
016 Dim // MP3名
017 !
018 UserFormOpen // ユーザーフォーム表示
019 UserFormSetText// ファイルパスセット
020 SHOW_MSG
021 !
022 Do-While // LpSwが1の間ループ
023 WaitUserForm // イベント待ち
024 Case-Call // 分岐コール
025 WLoop
026 QUIT // 終了
027 ! ----------------------------
028 ! 処理サブルーチン群
029 ! ----------------------------
030 再生 PlaySound // 再生
031 Return
032 時停 PauseSound // 一時停止
033 Return
034 再開 ResumeSound // 再開
035 Return
036 音量↑ SetSoundVolume // 音量↑
037 Return
038 音量↓ SetSoundVolume // 音量↓
039 Return
040 戻る SetSoundPosition// 戻る -10秒
041 Return
042 進む SetSoundPosition// 進む +10秒
043 Return
044 停止 StopSound // 停止
045 Return
046 再生ファイル選択
047 OpenFile // ファイルを開く
048 UserFormSetText// ファイルパスセット
049 Return
050 終了 SetVariable
051 Return
Wait(待ち)条件の指定により、「
待つ」か「
次のステップに進む」かを変える 。
指定された箇所、または、変数により指定された表示文字を判定し、
条件が満たされている間、
Waitする。
(条件にマッチした文字列は
%MatchData% に格納される。)
記述式1 条件式
|
最長待ち時間 |
最長待ち時間をミリ秒で指定(この時間が経過したら、無条件に次のステップに移行する) |
|
遅延時間 |
条件不成立からWait解除までの遅延時間(ミリ秒) 省略可 |
|
表示文言 |
監視指示 xxx |
|
|
xxx |
条件式: 条件式が真の時にWaitする。空白時は常にWait(指定時間まで) |
|
|
|
|
条件式の書式を参照してください |
記述式2 条件式 対象
対象(ウィンドウ等)を指定可
|
表示文言 |
監視指示 xxx yyy |
|
|
xxx |
同前項 |
|
|
yyy |
判定対象 |
|
|
|
|
指定が無いと、現在作業中のウィンドウ(配下のウィンドウも含む)が判定対象 |
|
|
|
* |
画面上の全てのウィンドウが判定対象 |
|
|
|
point |
マウスでポイントしているフィールドが判定対象 |
|
|
|
%aaaa% |
共有変数「aaaa」の値を判定 |
|
|
|
@bbbb% |
IEのフィールド(Id=bbbb)の値を判定 |
|
|
|
以外の文字 |
タイトルにその文字が含まれているトップウィンドウのみ判定対象
注:関数式などは指定不可 |
|
other2 |
未使用 |
記述例
記述例1(演算子が左)、記述例2(演算子が右) 両方可
記述例1 |
記述例2 |
|
説明 |
実行中 * |
|
← |
画面上に “実行中” を含む文字が表示されている時() |
実行中 |
|
← |
作業中のウィンドウ上に“実行中”を含む文字が表示されている時 |
実行中 point |
|
← |
ポイント位置に“実行中”を含む文字が表示されている時 |
進行状況 ウイルスバスター |
|
← |
タイトルに「ウイルスバスター」の文字が含まれるウィンドウ中に「進行状況」
を含む文字列が表示されている時 |
大阪 %Clipboard% |
|
|
クリップボード の内容に「大阪」の文字が含まれている時 |
=1 @prefecture@ |
1 = @prefecture@ |
|
IEページ上の「prefecture」(県のリストボックスとする)の上から2番目が選択 |
! |
|
← |
ポイント位置の値が変化した時 |
* point |
|
← |
ポイント位置に、何か文字が表示された時 |
"" point |
|
← |
ポイント位置が空白になった時(^* point と記しても可) |
完了しました point |
|
← |
ポイント位置に“完了しました”を含む文字が表示されていない時 |
=777 point |
777 = point |
← |
ポイント位置の値が「777」に等しい時 |
>98 point |
98 < point |
← |
ポイント位置の値が「98」より大きくなった時 |
>=98 point |
98 <= point |
← |
" 以上になった時 |
<34.56 point |
34.56 >point |
← |
ポイント位置の値が「34.56」より小さくなった時 |
<=34.56 point |
34.56 >= point |
← |
" 以下になった時 |
<>検索中 point |
検索中 <> point |
← |
ポイント位置の値が「検索中」と等しく無くなった時 |
<>"" point |
"" <> point |
← |
ポイント位置の値が 空白 で無くなった時 |
10<<40 point |
|
← |
ポイント位置の値が「10」より大きく「40」より小さくなった時 |
[右,左,中] point |
|
← |
ポイント位置に 右,左,中 のどれかの文字が含まれていた時 |
^[そば,蕎麦,ソバ] point |
|
← |
ポイント位置に そば,蕎麦,ソバ のどれも含まれていなかった時 |
注意:
Timeの値に注意してください。
小さ過ぎる値だと、結果が表示される前にWaitを抜けてしまいます。
Waitで実際に待つ時間は、
(
設定した時間)−(
ひとつ前の処理に要した時間)
となります。
注意:区切り文字は半角スペース
文字列中に半角スペースが含まれている場合は、文字列を「"」で囲む。
例:"実 行 中" "無題 - メモ帳"
文字列中に「"」が含まれる場合は「"」でエスケープ
例:"""完 了""しました"
表示される文言が認識できるかは、下記のツールで試すことが出来ます。
下記ツールで
表示文字が読み取れる場合は、本ツールでも認識できます。
ポイント位置の文字取得
Jumpは、条件により指定のラベルの行に
実行ステップを移動します。
|
|
表示文言 |
監視指示 xxx yyy |
|
|
xxx |
条件式 条件式が真の時にJumpする。空白時は無条件にJump |
|
|
|
|
条件式の書式を参照してください |
|
|
|
|
|
|
|
yyy |
|
監視対象 |
|
|
|
|
指定が無いと、現在作業中のウィンドウ(配下のウィンドウも含む)が監視対象 |
|
|
>* |
|
画面上の全てのウィンドウが監視対象 |
|
|
point |
|
マウスでポイントしているフィールドが監視対象 |
|
|
%aaaa% |
|
共有変数「aaaa」の値を判定 |
|
|
@bbbb% |
|
IEのフィールド(Id=bbbb)の値を判定 |
|
行ラベル |
条件式が真のときに処理ステップを移行するラベル名 |
記述方法は、Waitと同じ(ジャンプ先ラベルが必要になるだけ)
実際の作成例
繰り返し: Do〜Loop-While Do-While〜WLoop
条件を満たす間処理を繰り返します。
Do 〜 Loop-While 後置判定(処理を行った後に条件を判定)
|
Do
処理
Loop-While 条件式 |
|
少なくとも1回は処理が行われる
使用例:繰返し処理(2乗和) |
Do-While 〜 WLoop 前置判定(処理を行う前に条件を判定)
、
この
Loop 命令がある行の通過回数の制限値。
通過回数が指定回数より小さいと、指定のラベル行にジャンプします。
すなわち、ラベル行と、このLoop命令がある行との間の処理を
指定回数分繰り返します。
使用例
ループ回数 :
10
ラベル :
ST
とした場合、この行が
10回実行されたら、ジャンプせずに
下の行に進む。
よって、1を指定すると1回だけ(すなわち、Loop命令が無い場合と同じ)
使用例:sample6(ループ・乱数入力・自動応答).dat
繰り返し: For 〜 Next-For Exit-For
使用例:同梱サンプル:sample7_2(IE CSVからの連続入力_ID指定).dat
1〜100までの和 、
CSVファイル読み込み&出力 、
ランダムな文字列生成
指定の条件の間繰り返します。L
条件式
変数名;初期値;終了値;増分値
変数名: 使用する変数名−%は不要
初期値: 変数の初期値
終了値: 繰り返しの最終値
増分値: 繰り返しごとに変数に加算する値
上記の例では、変数を3から2ずつ加算し、21になるまで繰り返す。
すなはち、3,5,7、〜 19,21 の間、繰り返す。
Exit-For : For文脱出
自動応答は、
表示メッセージを読み取り、条件にあった文字(キー)を自動入力します。
|
|
最長待ち時間 |
最大待ち時間をミリ秒で指定。この時間が経過すると何もせずに次のステップに移行 |
|
遅延時間 |
監視文言検出から応答(自動キー入力)までの遅延時間(ミリ秒) 省略可 |
|
表示文言 |
監視指示 xxx yyy |
|
|
xxx< |
条件式 条件式が真の時に指定の文字を入力する。
入力した文字は、アクティブ(入力待ち)コントロールに送られる。 |
|
|
|
|
条件式の書式を参照してください |
|
|
|
|
|
|
|
yyy |
|
監視対象 |
|
|
|
|
指定が無いと、現在作業中のウィンドウ(配下のウィンドウも含む)が監視対象 |
|
|
* |
|
画面上の全てのウィンドウが監視対象 |
|
|
point |
|
マウスでポイントしているフィールドが監視対象 |
|
|
%aaaa% |
|
共有変数「aaaa」の値を判定 |
|
|
@bbbb% |
|
IEのフィールド(Id=bbbb)の値を判定 |
|
応答文言 |
条件式が真のときに入力する文字(またはキー名) |
キー名称
Enterキー:{Enter} Tabキー:{Tab} Pauseキー:{Pause}
バックスペースキー:{Backspace} ESCキー:{Esc} 改行:{CrLf}
キー指定詳細
注:「ファイルを開く/保存」などのダイアログボックスの時の「はい(Y)」「いいえ(N)」などの時は、
全てのウィンドウ「
*」を指定して下さい。
例:ファイル保存において
“
xxxは既に存在します。上書きしますか?” [
はい(Y)] [
いいえ(N)]
が表示された場合に、「
はい(Y)」を選択したい時
最長待ち時間 |
1000 |
← |
最大1秒待つ |
応答時間 |
500 |
← |
文言検出から0.5秒後に、応答(自動キー入力) |
表示文言 |
上書きしますか * |
← |
監視するメッセージとウィンドウ(*:全ウィンドウを監視) |
応答文言 |
Y |
← |
「はい(Y)」を選択 |
上記の例の場合
Y の代わりに
{Tab}{Enter} と記述しても、同じ結果になる。
応答した文字は
%AUTORSP% に格納される。
応答しなかった(条件を満たさなかった、タイムアウト)場合は、
空白がセットされる。
条件式の書式 空白の時は全てに真 |
|
記述例1(演算子が左)、記述例2(同右)両方可 |
|
|
記述例1 |
記述例2 |
説明 |
|
SSS |
|
文字列が含まれる → 表示文字列に「SSS」が含まれたら真 |
|
=SSS |
SSS = |
等しい → 表示文字列(数値も含む)が「SSS」に等しかったら真 |
|
[S1,S2,・Sn] |
|
文字 S1,S2・Sn のどれかを含んでいたら真 (カンマ区切り、複数可) |
|
|
|
− 以下は監視対象が「point」の時のみ有効 − |
|
^[S1,S2,・Sn] |
|
文字 S1,S2・Sn のどれも含んでいなかったら真 |
|
* |
|
全ての文字列 → 何か文字が表示されたら真 |
|
^* |
"" |
空文字 → 文字が表示されなくなったら真(""でも可) |
|
^SSS |
|
含まれない文字列の指定 → 表示文字列に「SSS」が含まれなくなったら真 |
|
>nn |
nn < |
nn(数値)より大きくなったら真 数値:(整数/小数の形式) |
|
<nn |
nn > |
nn(数値)より小さくなったら真 |
|
n1<<n2 |
|
n1より大きくn2より小さくなったら真 |
|
|
|
|
注意:監視文言に
半角スペースが含まれる場合
半角スペースを区切り文字として使用しているため、文字列中に半角スペースが含まれと正常に認識できなくなります。
半角スペースが含まれる場合は、文字列全体を「
"」(
ダブルクォート)で囲んで下さい。(CSV形式に準拠)
例 「完 了 しました」のような文言を検知したら「END」にジャンプする場合
Jump "完 了 しました" END
文言の中に「
"」が含まれる場合は「
"」を並べてエスケープします。
例 「
動作"完 了"」の文字を監視する場合
Jump "動作""完 了""" END
(注1:「
=」「
!」「
*」「
^」「
point」「
<」「
>」「
[」「
]」の文字自体を監視対称とする文字エスケープ機能は後日対応)
(注2:「
xxx」「
yyy」内のスペースは不可)
(注3:「
!」(exclamation mark-エクスクラメーションマーク)「
*」(asterisk-アスタリスク)、「
^」(Caret-キャレット))
画像としてメッセージを表示される場合や、文字情報を取得できない場合は、本コマンドを使用。
監視範囲は、指定位置(自動的にマウスポインタも移動)の
上下左右8ピクセルの範囲内(既定値) → 右図
なお、範囲幅高は4〜48ピクセルで指定可
監視間隔は1秒
指定時間内に画像変化を検知しなかった場合は %GotData% に"time out"が設定される。 |
|
|
編集フォームで「WaitImgChange」を選択すると、マウスを囲むようにピンク枠が表示されるので、その範囲内を目安に座標を指定
右図 緑信号内のピンクで囲われた範囲が監視対象領域。
この領域内のピクセルの色がひとつでも値が変わると、検知とみなして待機状態が解除され次のステップに移行する。
もし、アクションを起こした(実行キー押下など)直後に、画像変化が発生する可能性がある場合は、予め比較ベース画像を取得しておく必要がある。
そのような場合には、アクションを起こす行の上で、WaitImgChangeInitコマンドを発行しておく(後記) |
|
|
|
|
|
注意1:
カレット(caret-入力フィールドでのカーソル)も画像として認識するので、範囲内にカレットを含めてはいけない。 ・・・・ そもそも、カレットが表示される場合は、Wait xx point のコマンドが使える筈なので、このコマンドを使う必要は無いのですが・・
|
|
注意2:
タイムアウトの判定方法
タイムアウト(既定時間内に画像変化無し)時は、%GotData% に "time out" の文字がセットされます。
よって、変化無しの時に既定のラベルにジャンプしたい時は、
Jump %GotData% = "time out" ジャンプ先ラベル
のように記述します。(半角空白が含まれるので「"」で括る。)
空白で無いという意味で
Jump %GotData% <> "" ジャンプ先ラベル
のように記述しても可。 |
|
|
|
補足
画像監視間隔は300〜1000ミリ秒間のランダムな時間(動的に時間生成)
(画像点滅時にその周期と同期して検知失敗とならないようにするため)
よって、画像変化から検知アクションまでに最短0.3秒、最長1秒となる。 |
|
|
実際の例は「
サンプル集」の「
ポイント位置近辺の画像変化を監視」を参考。
この例では、
・実行すると、ダミーのアプリ「あっち向いてホイ」が起動される。
この時、信号は
赤。
・8秒後に、信号が
青になると、それを検知して
メッセージボックスが表示される。
となる。
WaitImgChangeInit: 初期状態設定−ポイント位置近辺の画像変化を監視
使用例
WaitImgChangeは、アクションを起こしてから画像変換まで時間がある場合(約1秒以上)は有効だが、アクション(実行キー押下など)を起こしたら即座に変化する場合は、検知できない。
(WaitImgChangeコマンド処理先頭で比較ベース画像を取得するので、その段階で変化が既に起きていると、常に一致して変化を認識できない。)
この様な場合、アクションを起こす前に、WaitImgChangeInitコマンドを発行して、比較ベース画像を取得しておくと変化を検知できるようになる。
設定項目は、WaitImgChangeとほぼ同じ。
また、WaitImgChangeInitで初期状態を設定された場合は、WaitImgChangeの指定位置と範囲幅高は無視される。
|
|
DOSコマンドや、
VBScriptを実行する。パラメータ渡しや、実行結果の返却も可能。
使用方法
RunScript を選択後に、
「開く」ボタンをクリックすると
スクリプト用のエディタが開く
スクリプトを記述し、スクリプトの種類を指定(bat または vbs)
|
|
|
入力方法
・タブはCtrl+Tab
・スクリプト内で共有変数を使用する場合、
そのデータ内に改行は不可(コンパイルエラー-対策検討中)
マウスレコーダー⇔スクリプト間インタフェース
マウスレコーダー → スクリプト : 共有変数
スクリプト → マウスレコーダー : ファイル(ファイル名は%FuncRetText%)
(共有メモリや環境変数でのインタフェースはスクリプト側の負担が大き過ぎるため本方式を採用。他に良い案が見付かり次第改良予定)
|
|
「Try Run」をクリックすると、スクリプトの実行を試行できる。
使用している変数に値を代入して、「Run」をクリック。
エラーが表示されたら、スクリプトを見直す。
「Try Run」の左のチェックボックスは、最小化して実行。
DOSの場合にDOS窓を表示したくない時にチェックしておくと、最小化状態で実行される。 |
・スクリプトへのパラメーター渡し
スクリプト内でマウスレコーダーの変数を参照できる。
(実際には、実行時に
%XXXX%が実際の値に変換されるだけ)
・スクリプトからの返却値
整数の場合は、直接、値を返却。
文字列の場合は、返却用のファイル(
%FuncRetText%)を作成して値を返す。
(
%FuncRetText%の値は定義済み )
VBScript
例
整数の場合(nn)
Wscript.Quit nn
文字列の場合
ちょいと面倒だが、ファイルを作成して値を書き込む
Set fs = CreateObject( "Scripting.FileSystemObject" )
Set f = fs.CreateTextFile( "%FuncRetText%" )
f.WriteLine( Dt )
f.close
Set fs = nothing
作成したファイルは、自動的に削除される。
DOS これは簡単。返したい値をファイルに
リダイレクトすればよい。
例 値が入っている変数が
ReturnCode の場合
echo %ReturnCode% > %FuncRetText%
返却値についての補足
VBSで返却する値が整数である場合は
Wscript.Quit nn
としても良い。(
nnは負の整数も可)
ただし、返却値のファイルが無い場合にセットされるので、
両方(
Wscript.Quit と
%FuncRetText% によるファイル)は不可
また、コンパイルエラーなどでも
1 がセットされるので、
返却値には 1 を使わないのが望ましい。
意図的に返却値を設定しない場合は
0:
正常終了 1:
異常終了 となる。
ファイルからの実行
下図のように、スクリプト本文ではなく、
スクリプトファイルのパスを記述した場合は、そのファイルが実在する場合に限り、読込まれて実行される。
この場合
、外部の関数/サブルーチンとして何度でも
再利用できる利点がある。
記述は、相対パス/絶対パス 共に可
また、この場合、拡張子フィールドは無視される
実際の例は、同梱の
sample18(RunScript:うるう年判定).dat を参