プログラム機能

条件判断機能を持つコマンド群

状況に応じて処理を変化させることが出来ます。

一時停止してデバッグしたい時などは、ブレークポイントの設定の項を参照してください。
メニュー
手動マウス停止
条件分岐: If〜Else-If〜Else〜End-If
サブルーチンコール: Call
条件付サブルーチンコール: CallIf / Return
値別サブルーチンコール: Case-Call
条件付待機: Wait
条件分岐: Jump
繰り返し: Do〜Loop-While Do-While〜WLoop
ループ: Loop
繰り返し: For 〜 Next-For Exit-For

自動応答: 自動応答
条件式の書式
WaitImgChange: 画像変化を監視
WaitImgChangeInit: 同 初期状態設定
RunScript: スクリプト実行




手動マウス停止: マウス移動による停止をプログラムで指定

手動停止オン:マウス移動による停止を強制有効にする
手動停止オフ:マウス移動による停止を強制無効にする

いずれかのコマンドが発行された以降は、[設定]の[手動マウス操作による停止]は無視される

条件分岐: 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 / Return   使用例:モジュール化(サブルーチンコール)

サブルーチン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-CallCase-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  使用例:sample5(あっち向いてホイ)

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  使用例:メッセージボックスの表示と応答判別方法
                        同梱サンプル sample5(あっち向いてホイ) sample6(ループ・乱数入力・自動応答)

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   前置判定(処理を行う前に条件を判定) 

Do-While 条件式
  処理
WLoop
最初から条件式が満たされない場合、1度も処理が行われない

使用例:マウスの螺旋移動
    変数とループを使った画面スキャン


ループ: Loop   使用例:sample5(あっち向いてホイ)sample6(ループ・乱数入力・自動応答)

この 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文脱出

自動応答: 自動応答   使用例:sample6(ループ・乱数入力・自動応答)

自動応答は、表示メッセージを読み取り、条件にあった文字(キー)を自動入力します。
最長待ち時間 最大待ち時間をミリ秒で指定。この時間が経過すると何もせずに次のステップに移行
遅延時間 監視文言検出から応答(自動キー入力)までの遅延時間(ミリ秒) 省略可
表示文言 監視指示 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-キャレット))

WaitImgChange: ポイント位置近辺の画像変化を監視
  使用例:ポント位置近辺の画像変化を監視

画像としてメッセージを表示される場合や、文字情報を取得できない場合は、本コマンドを使用。

監視範囲は、指定位置(自動的にマウスポインタも移動)の
上下左右8ピクセルの範囲内(既定値)  → 右図
なお、範囲幅高は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の指定位置範囲幅高無視される。

RunScript: スクリプト実行  使用例:VBScriptを利用したファイルリスト表示(返却値あり)

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% によるファイル)は不可

また、コンパイルエラーなどでも がセットされるので、返却値には を使わないのが望ましい。

意図的に返却値を設定しない場合は 正常終了 異常終了 となる。

詳しくは「サンプル集」を参考。
VBScriptを利用したエクセルへのデータ書き込み(返却値なし)
VBScriptを利用したファイルリスト表示(返却値あり)
VBScriptを関数として使用(うるう年判定)

ファイルからの実行

下図のように、スクリプト本文ではなく、スクリプトファイルのパスを記述した場合は、そのファイルが実在する場合に限り、読込まれて実行される。
この場合、外部の関数/サブルーチンとして何度でも再利用できる利点がある。



記述は、相対パス/絶対パス 共に可
また、この場合、拡張子フィールドは無視される

実際の例は、同梱の sample18(RunScript:うるう年判定).dat を参
×
PageTop