スクリプトについて

 uwsc.exe は、スクリプトエンジンを搭載してます
 自分でスクリプトを書く事により、かなり高度な制御が可能です


 また、UWSCでは以下のインターフェースも備えています

  DLL: Windowsが提供するWin32APIもDLL構成ですので、それらを利用する事も可能です

  COM (ActiveX): Excelや InternetExplorer等の COMインターフェースを備えたアプリの制御ができます

  MSAA (Microsoft Active Accessibility): アクセシビリティ用のインターフェースを利用します
  通常(APIにて)の制御の出来ないアプリに対しても有効であったりします(但し遅い)

  Java Accessibility (Java Access Bridge for Windows): JAVAアプリ専用のアクセシビリティ
  各関数にて ACC指定がされた時に対象アプリがJAVAであれば自動でこちらが選択されます
  Java Access Bridge for Windows:インストール方法



<変数>

 変数に型はありません
 大文字と小文字の区別はありません
 ローカル変数、グローバル変数の区別があります

  ローカル変数には宣言は要りません(Option指定で変更可:DIM 変数名)
  グローバル変数には宣言が必要: PUBLIC 変数名
  多次元配列には宣言が必要: DIM 変数名[数]
  (配列での初期値代入: DIM X[2]=1,2,3  配列数の省略可 DIM X[]=1,2,3 )
  ※ 注:PUBLIC変数の初期化はスクリプト実行前に行われます



<文字処理>

 文字列は必ず "ダブルコーテイション" で括ってください
 文字列の比較演算時は大文字、小文字の区別はしません(Option指定で変更可) 
 文字列の結合演算子は + です
 文字列に改行を含める時は <#CR>  "ダブルコーテイション" を含める時は<#DBL>



<演算式の優先順位>

  ( )                 優先順位高い
  !       (論理否定)
  *, /, MOD
  +, -
  >, <, =, >=, <=, <>  
  AND
  OR, XOR              優先順位低い



<コメント>

 // から行末までです



<行結合>

 _ (アンダーバー)  // 行の最後に付ける事により次の行と結合させます



<マルチステートメント>

 ; (セミコロン)   // N88Basic的な1行IF文での使い方はダメ



<定数定義>

 CONST 定数名 = 定数
 ※ CONSTの初期化はスクリプト実行前に行われます



<組込み定数>

 TRUE    // 1
 FALSE    // 0
 NULL    // ヌルポインタ
 EMPTY   // 値の無い状態を示す
 NOTHING   // オブジェクトの無い状態を示す



<特殊文字>

 <#CR>   // 改行コードを表す
 <#DBL>  // "ダブルコーテイションを表す
 <#TAB>  // タブを表す



<16進指定>

 $     // $FF =255



<起動時パラメーター>

 // スクリプトにパラメーターを付けて起動した場合、その値は配列変数 PARAM_STR[ ] に入る
 PARAM_STR[ ]   // 配列はゼロから



<OPTION指定>

 // スクリプトの先頭で宣言、各種設定の変更 (,カンマにて項目の複数指定可)
 OPTION 項目
     EXPLICIT         // 変数宣言の強制(全ての変数でDIM 、もしくはPUBLIC宣言が必要)
     SAMESTR         // 文字比較、置換、サーチにて大文字、小文字を区別する
     OPTPUBLIC         // PUBLIC変数の重複定義を禁止する
     OPTFINALLY        // Try-Finally間で強制終了が発生した時にも必ず Finally部を実行する
     SPECIALCHAR       // 実行時に特殊文字(<#CR><#DBL><#TAB>)の変換をしない
     SHORTCIRCUIT       // 論理演算(if,ifb,while,repeat)にて短絡評価をする(但しカッコ内は無効)
     NOSTOPHOTKEY       // 停止ホットキーは無効にする
     TOPSTOPFORM       // STOPボタンウィンドウを最前面固定する
     FIXBALLOON        // 吹き出しを仮想デスクトップの全画面に出す
     DEFAULTFONT= フォント名 // フォント,サイズを変更する(BALLOON, MSGBOX等) 例) "MS ゴシック,16"
     POSITION= X, Y     // 位置を変更する
     LOGPATH= ログパス名   // ログファイルのパス、ファイル名を変更する
     LOGLINES= ログ行数    // ログ最大行数を変更する
     LOGFILE= ログ出力モード // ログファイルの出力= 1:出力しない、2:日付を付けない、3:秒も付ける、4:以前のログは消去
     DLGTITLE= タイトル    // INPUT, MSGBOX, SLCTBOX でのタイトルを変更する

 例)



<DLL 使用定義>

 // DLL(API等)の関数を使用する事ができるようになります (64bitのDLLは呼び出せません)

 DEF_DLL 関数名(型, 型, ...): 戻り型: DLL名
 型: intlongbooluinthwndstringWstringfloatdoubleworddwordbytecharpcharWcharpWcharbooleanlonglongExtendedSafeArray

 参照引数(値変更あり)の場合は Var 宣言を付ける   関数名( var double, var int )      
 構造体:型を { } にて展開して書く    関数名( double, {int, int, int} ) 
 配列の場合は型に [] を付ける      関数名( double[], int[] )

 ※int=long= bool(4byte)、dword=uint=hwnd、 char=boolean(1byte)
   ヌルポインタを渡す時は NULL定数を使用してください

 例)



<スレッド生成>

 // スレッド生成して実行する事ができます
 THREAD 関数名()    // 関数は別スレッドにて実行される

 例)



<MODULE化>

 // MODULE化定義をします
 MODULE モジュール名
     CONST 変数        // モジュール名.変数 にて外部からアクセス可
     PUBLIC 変数        // モジュール名.変数 にて外部からアクセス可
     DIM 変数         // 外部からアクセス不可
     PROCEDURE モジュール名  // コンストラクタ
     PROCEDURE 関数名()
     FUNCTION 関数名()
 ENDMODULE

 もしくは CLASS - ENDCLASS
 インスタンス生成はできません
 自モジュール内の変数、関数には 自モジュールを示す THIS. を付けてのアクセス可
 モジュール内からモジュール外関数を使う場合に GLOBAL.関数名 にて明示可
 モジュール名と同じ関数はコンストラクタとしてスクリプト開始時に処理される

 例)



<WITH文>

 // モジュール、COMオブジェクトの表記(ドット構文)にてモジュール名、オブジェクトを省略できます
 WITH 省略部
     .変数      // 省略部.変数
     .関数名()    // 省略部.関数名()
 ENDWITH

 変数、関数名の先頭には .ドットを付けてください



<複数行文字列の定義>

 // 複数行にわたる文字列を定数として定義します
 TEXTBLOCK 定義名
    文字列..........
    文字列..........
 ENDTEXTBLOCK

 例)



<連想配列>

 // 連想配列の宣言
 HASHTBL 変数
 HASHTBL 変数 = HASH_CASECARE  // 大文字小文字を区別する(デフォルトは区別しない)
 HASHTBL 変数 = HASH_SORT    // 順列で読出す時にキーはソートされている

 // 値の設定・読出しは一次元配列と同じ (読出し時、キーが無ければEMPTYを返す)
 変数[キー] = データ

 // キーが存在するか
 変数[キー, HASH_EXISTS]     // キーが存在すればTrueを返す

 // 削除
 変数[キー, HASH_REMOVE]     // 削除できればTrueを返す

 // 順列読出し
 変数[順列番号, HASH_KEY]     // キーを返す
 変数[順列番号, HASH_VAL]     // 値を返す

 // 中身のクリア
 変数 = HASH_REMOVEALL

 ※ 削除 HASH_REMOVE は必要無くとも変数で受ける必要あり

 例)



<例外処理>

 // TRY - FINALLY ルーチン中断時にも必ず実行されます
 TRY
   処理(EXIT)
 FINALLY
   処理
 ENDTRY


 // TRY - EXCEPT 実行時エラーが起きた時に実行されます
 TRY
   処理(エラー)
 EXCEPT
   処理
 ENDTRY

 ※ エラーメッセージは特殊変数 TRY_ERRMSG に格納
   エラー行は特殊変数 TRY_ERRLINE に格納

 例)



<関数の定義>
 ※ 関数はメインルーチンの後に書いてください。
  (メインルーチンは関数前までであり、関数後にメインルーチンを書いても実行されません)
 ※ 関数名に次の文字は使えません , + * = < > ( ) ! ?



 // Procedure - Fend    手続き型(戻り値なし)

 PROCEDURE 関数名( 引数, Var 引数, 引数[], Var引数[][], 引数=定数, .... )
    処理
 FEND

 Var 宣言を付けると引数を変更可能とする (参照引数)
 配列変数には次元数分 []を付ける (2次元配列の場合 引数[][] )
 = 定数 にてデフォルトパラメータを指定できる(デフォルトパラメータ以降に通常引数を書く事はNG)

 例)



 // Function - Fend    関数(戻り値あり)

 FUNCTION 関数名( 引数, Var 引数, 引数[], Var 引数[][], 引数=定数, .... )
    処理
    RESULT = 戻り値    // Result に戻り値を入れる
 FEND

 Var 宣言を付けると引数を変更可能とする(参照引数)
 配列変数には次元数分 []を付ける (2次元配列の場合 引数[][] )
 = 定数 にてデフォルトパラメータを指定できる(デフォルトパラメータ以降に通常引数を書く事はNG)

 例)



<制御文>
  [ ] 内は省略可能



 // 1行の IF 文
 IF 式 THEN 真 [ELSE 偽]

 例)



 // IF のブロック文 IF(もしくはIFB) ENDIF

 IF 式 [THEN] (もしくはIFB
   真
 [ELSEIF 式 [THEN]]
   :
 [ELSE]
   偽
 ENDIF

 例)



 // For To Next 文  初期値から終了値までループ
 FOR 変数 = 初期値 TO 終了値 [STEP 刻み値] 
   処理
 NEXT       // NEXTの後に変数を書いてはダメ

 例)



 // For In Next 文  配列の要素数分ループ
 FOR 変数 IN 配列変数 
   処理
 NEXT

 ※ 配列変数には配列の他に COMのコレクション、または次の関数が指定可能: GetDir, GetItem, GetAllWin
 ※ 配列変数に文字列が指定された場合には1文字づつ要素分解

 例)



 // While Wend 文
 WHILE 式        // 式が True の間実行
   処理
 WEND

 例)



 // Repeat Until 文
 REPEAT
   処理
 UNTIL 式        // 式が False の間実行

 例)



 // Select Selend 文
 SELECT 式
  CASE 式       // 数値でも文字でも変数でもOK
    処理
  [CASE 式, 式]    // ,カンマによる複数表記可
    処理
  [DEFAULT]      // デフォルト
    処理
 SELEND

 例)



 // Call 文 スクリプト(UWSファイル)を取り込む
 CALL UWSファイル名             // 拡張子(uws)は省略可
 CALL UWSファイル名.uws(xxx, xxx, ...)  // 引数を付けた場合に値は PARAM_STR[] 変数に入る

 ※ UWSファイル名の割り当てに変数を使用する事はできません

 例)



 // FOR, WHILE, REPEAT のループを中断
 BREAK [定数]   

 多重ループ中にて定数が指定された場合に、その定数分ループをBREAKする (デフォルト 定数=1)

 例)



 // FOR, WHILE, REPEAT のループの先頭へ
 CONTINUE [定数]   

 多重ループ中にて定数が指定された場合に、その定数分ループをCONTINUEする (デフォルト 定数=1)

 例)



 // 関数を抜ける
 EXIT

 // 直ちにプログラムを終了  
 EXITEXIT [終了コード]

 例)



 // Print文 ロギング
 PRINT 表示文

 表示用のウインドウが1つ勝手に開きます
 又、同じ内容をUWSC.LOGに保存 (最大行数は uwsc.ini の LogLines= にて指定可、もしくはOptionにて)

 例)