【UWSC】基本構文とサンプル集

PCの操作を繰り返し行うことがあります。このように繰り返し行うPCの操作を自動化するためのアプリがUWSCです。UWSCは古いアプリですが、今でもよく使われています。
UWSCはVBライクなスクリプト言語で、PC操作(主にUI操作)を記述できるアプリになります。
この記事では、UWSCの基本的な構文とサンプルをまとめています。
UWSCのダウンロード先
UWSCは以下からダウンロードできます。
基本構文
コメント
// コメントの内容
行末までがコメントとして扱われます。
変数(DIM)
// DIM 変数名 [=初期値]
DIM count = 100
変数を宣言します。
配列でない場合、DIMは省略可能ですが、変数であることを明示するために省略しない方が良いです。OPTIONを指定することでDIMによる宣言を強制することもできます。
DIMで宣言した場合は、ローカル変数となり、スコープは自作関数内になります。
配列(DIM [])
// DIM 変数名[サイズ] [=値[,値 ...]]
DIM list_1[3] = 1,2,3
DIM list_2[] = 1,2,3
配列を宣言します。
配列の値はカンマ区切りで記載します。サイズは記載を省略することができます。
連想配列(HASHTBL)
// 連想配列の宣言
// HASHTBL 変数名 [=オプション(複数の場合は`or`でつなげる)]
HASHTBL dict
// 要素の追加(値の代入)
dict["red"] = "赤"
dict["blue"] = "青"
// 要素の参照
PRINT dict["red"]
PRINT dict["blue"]
// キーの存在確認
PRINT dict["red", HASH_EXISTS]
// キーを取得
PRINT dict[0, HASH_KEY]
// 値を取得する
PRINT dict[0, HASH_VAL]
// 要素の削除
PRINT dict["blue", HASH_REMOVE]
// 配列をクリア
dict = HASH_REMOVEALL
連想配列の宣言時に指定可能なオプションは以下の通りです。
| オプション | 説明 |
|---|---|
| HASH_CASECARE | キーの大文字小文字を区別する。 |
| HASH_SORT | キーをソートする。 |
グローバル変数(PUBLIC)
// PUBLIC 変数名 [=初期値]
PUBLIC count = 100
構文はDIMと一緒です。違いは、スコープが自作関数外までとなり、どこからでもアクセス可能になります。
定数
// CONST 変数名 = 初期値
CONST pie = 3.14
定数を宣言します。宣言後は値を変更できません。
演算子
算術演算子は以下の通りです。
| 算術演算子 | 説明 |
|---|---|
| ( ) | 演算の優先順位を変更する。 |
| ! | 否定 |
| * | 乗算 |
| / | 除算 |
| MOD | 剰余 |
| + | 加算 |
| - | 減算 |
| = | 代入 |
比較演算子は以下の通りです。
| 比較演算子 | 説明 |
|---|---|
| > | 大なり |
| < | 小なり |
| = | 等価 |
| >= | 大なりイコール |
| <= | 小なりイコール |
| <> | 不等価 |
| AND | 論理積 |
| OR | 論理和 |
| XOR | 排他的論理和 |
文字列
DIM str="文字列"
文字列はダブルクォーテーションでくくります。
DIM str="文字列を" + "結合する"
文字列を結合する場合は+演算子を使います。
複数行ステートメント
DIM list=1, _
2, _
3
1行の命令が長くなる場合などで、命令を複数行に分けたい場合は、_を行末につけます。行末に_がある場合は、命令が次の行に続いていることを示します。
特殊文字
特殊文字は文字列中にそのまま記述できない文字です。特殊文字は以下の文字列で表します。
| 特殊文字 | 説明 |
|---|---|
| <#CR> | 改行 |
| <#DBL> | ダブルクォーテーション |
| <#TAB> | タブ |
メッセージ出力(PRINT)
PRINT "メッセージ"
メッセージ出力用のウィンドウにメッセージを出力します。
吹き出し(FUKIDASI)
FUKIDASI(メッセージ, 表示位置x座標, 表示位置y座標, [向き, フォントサイズ, フォント名, 文字色, 背景色, 透明度])
吹き出しを表示します。
関数(FUNCTION)
FUNCTION 関数名([引数リスト])
// 関数の処理
RESULT = 戻り値
FEND
FUNCTION文は独自関数を定義する場合に使用します。
<引数リスト>には、関数に渡す引数を定義します。複数の引数を渡す場合には、カンマ区切りで定義します。
また、<引数リスト>はarg1, arg2のように引数名のみ記載した場合は、値渡しとなり、VAR arg1, VAR arg2のようにVARをつけた場合は参照渡しになります。
PROCEDURE文とことなり、関数は戻り値を返すことができます。戻り値はRESULTに代入します。
プロシージャー(FUNCTION)
FUNCTION 関数名(引数リスト)
// 関数の処理
RESULT = 戻り値
FEND
プロシージャーもFUNCTIONと同様に独自関数を定義することができます。FUNCTIONと異なるのは戻り値が返せない、という点です。
オプション(OPTION)
// OPTION オプション(複数指定はカンマ区切り)
OPTION EXPLICIT,OPTPUBLIC
オプションは、主にスクリプトに対するルールを宣言する構文です。指定できるオプションは以下の通りです。
| オプション | 説明 |
|---|---|
| EXPLICIT | DIMまたはPUBLICによる変数宣言を強制する。 |
| SAMESTR | 文字列の比較、置換、検索で大文字/小文字を区別する。 |
| OPTPUBLIC | PUBLIC変数の重複宣言を禁止する。 |
| OPTFINALLY | TRY-FINALLY間で強制終了した場合にもFINALLY部を実行する。 |
| SPECIALCHAR | 特殊文字(<#CR><#DBL><#TAB>)の返還を無効にする。 |
| SHORTCIRCUIT | 論理演算で短絡評価をする。 |
| DEFAULTFONT | MSGBOXやFUKIDASI等に使用するフォントとサイズを指定する。(例:DEFAULTFONT=“フォント名, フォントサイズ”) |
| POSITION | 位置を変更する。(例:POSITION=X, Y) |
| LOGPATH | ログのパスを指定する。(例:LOGPATH=“C:\temp\uwsc.log”) |
| LOGLINES | ログの最大出力行数を指定する。(例:LOGLINES=1000) |
| LOGFILE | ログの出力方法を指定する。1:出力しない。2:日付なしで出力する。3:秒を出力する。4:過去のログをクリアする。(例:LOGFILE=3) |
| DLGTITLE | INPUT, MSGBOX, SLCTBOXのタイトルを変更する。(例:DLGTITLE=“UWSC”) |
制御構文
IF文
IF 条件式1 THEN
//条件式1がTRUEの場合の処理
[ELSEIF 条件式2 THEN]
//条件式2がTRUEの場合の処理
ELSE
//条件式1、条件式2ともにFALSEの場合の処理
ENDIF
条件によって処理を分けたい場合にはIF文を使います。
FOR文
FOR カウンタ変数名 = 初期値 TO 終了値 STEP 刻み幅
// 繰り返しの処理
NEXT
FOR文は繰り返して処理したい場合に使います。
繰り返し処理はFOR文以外にWHILE文やREPEAT文があります。FOR文の特徴はカウンタを使用してカウンタがある値になるまで繰り返す点になります。配列を順に処理するといった場合に便利です。
WHILE文
WHILE 条件式
//繰り返しの処理
WEND
WHILE文は繰り返して処理したい場合に使います。
WHILE文はFOR文と異なり、カウンタを持っていません。カウンタは自前で用意する等が必要です。また、REPEAT文と異なり文の先頭に条件式があるため、繰り返し処理が一度も実行しない場合があります。
REPEAT文
REPEAT
//繰り返しの処理
UNTIL 条件式
WHILE文はWHILE文と同じく、カウンタを持っていません。カウンタは自前で用意する等が必要です。また、WHILE文と異なり文の最後に条件式があるため、少なくとも1回は繰り返し処理が実行されます。
SELECT文
SELECT 式
CASE 文字列or数値or変数
処理
[CASE 文字列or数値or変数]
処理
DEFAULT
上記CASEにいずれも合致しない場合
SELEND
値によって処理を分ける場合に使用します。
CASE文は条件式ではなく値を記載するため、コードが短く見やすくなります。
CALL文
// CALL 別のUWSファイルパス
CALL UWSファイルパス
別のUWSファイルを呼び出す場合に使用します。ファイルを分割することで、スクリプトが見やすく管理しやすくなります。
BREAK文
FOR i = 1 TO 100 STEP 1
// iが10になったらループを抜ける
IF i = 10 THEN BREAK
PRINT i
NEXT
スクリプト構文 FOR, WHILE, REPEAT のループを中断します。
CONTINUE文
FOR i = 1 TO 100 STEP 1
// iが10はPRINTせず、11のループから再開する
IF i = 10 THEN CONTINUE
PRINT i
NEXT
スクリプト構文 FOR, WHILE, REPEAT のループで次のループから処理を再開する。
EXIT文
FUNCTION MYFUNCTION()
// 条件がTRUEの場合、関数を終了する
IF 条件 THEN
EXIT
ENDIF
FEND
関数の処理を途中で終了する場合、EXIT文を使います。
EXITEXIT文
FUNCTION MYFUNCTION()
// 条件がTRUEの場合、スクリプトを終了する
IF 条件 THEN
EXITEXIT
ENDIF
FEND
処理の途中でスクリプトを終了する場合、EXITEXIT文を使います。
制御関連スクリプト関数
アプリを起動する
// ウィンドウID = EXEC(アプリのパス, [同期フラグ, x座標, y座標, 幅, 高さ])
winId = EXEC("c:\windows\system32\notepad")
アプリを起動する場合に、EXEC関数を使用します。
<同期フラグ>
FALSE:アプリの終了を待たない(デフォルト)
TRUE:アプリの終了を待つ
<x座標, y座標, 幅, 高さ>
アプリを表示する位置とウィンドウのサイズを指定する。
スリープする
// SLEEP(スリープする秒数)
SLEEP(0.5)
DOSCMD
// 標準出力 = DOSCMD(コマンド, [同期フラグ, 画面表示, UNICODE出力])
DOSコマンドを実行する場合に、DOSCMD文を使用します。
<同期フラグ>
FALSE:DOSコマンドの終了を待たない(デフォルト)
TRUE:DOSコマンドの終了を待つ
<画面表示>
FALSE:コマンドプロンプトを表示しない(デフォルト)
TRUE:コマンドプロンプトを表示する
<UNICODE出力>
FALSE:標準出力をANSIで出力する(デフォルト)
TRUE:標準出力をUNICODEで出力する
最後まで読んでいただきありがとうございます。
また読んでくださいませ。
そんじゃーね。