Edited at

UWSC を AutoIT 置き換えをしてみよう(1)

More than 1 year has passed since last update.


はじめに

すでにUWSCを愛用している方であればご存知の通り、UWSCの製作者umiumi氏が消息を絶ってしまい、現在Free版はベクターから入手できるものの今後の更新や入手が困難になることが予想されることから、UWSCをAutoIT3に置き換えることを検討したいと思い、記事を起こしました。

量があるので、何回かに分けて投稿の予定です。


UWSCに対するAutoITの構文について

今回は、UWSCの関数や構文をAutoITのどの構文に置き換えできるのかまとめていこうと思います


エディタ/IDE


  • UWSC

UDebug/XRef(UWSC Proにある専用エディタ/デバッカ)


  • AutoIT

Visual Studio Codeに「Autoit」の拡張機能を追加


EXE化、コンパイル


  • UWSC

uws2exe/uwsexe(UWSC Proにあるコンパイラ)


  • AutoIT

専用コンパイラが付属


インスペクタ

実行中のプロセスからクラス、コントロール、リソースを探してコード化を補助するツールのこと


  • UWSC

なし(外部ツールのUWSCコードの断片生成器が該当)


  • AutoIT

AutoIT Window Info


変数


ローカル変数


  • UWSC

宣言不要


  • AutoIT

local 変数名 (省略可能)


グローバル変数


  • UWSC

PUBLIC 変数名


  • AutoIT

Global 変数名


多次元配列


  • UWSC

DIM 変数名


  • AutoIT

Dim 変数名


定数定義


  • UWSC

 CONST 定数名 = 定数


  • AutoIT

const 変数名

Enum 変数名 // 初期化


型宣言


  • UWSC

なし


  • AutoIT

Int32 32ビット単精度整数

Int64 64ビット単精度整数

Double 倍精度浮動小数点数

文字列 文字列には2147483647文字まで保持可能。

バイナリ バイナリデータ。2147483647バイトまで保持可能。

ポインタ メモリアドレスポインタ。 32ビットまたは64ビット。使用されているAutoItのバージョンに依存します。


文字処理


  • UWSC

 文字列は必ず "ダブルコーテイション" で括ってください

 文字列の比較演算時は大文字、小文字の区別はしません(Option指定で変更可) 

 文字列の結合演算子は + です

 文字列に改行を含める時は <#CR>  "ダブルコーテイション" を含める時は<#DBL>


  • AutoIT

 文字列はマルチバイトの場合、必ず"ダブルコーテイション"で括ってください

 文字列の比較演算時は大文字小文字を識別しますので注意してください

 文字列の結合演算子は & です

 文字列に改行を含める場合は、\nもしくは\r\n、文字列中に"が含まれる場合は\"のようにエスケープします


演算式の優先順位

  ( )                 優先順位高い

  NOT※

  ^※

  !※※       (論理否定)

  *, /, MOD※※

  +, - ,

  >, <, =, >=, <=, <> ,==※

  

  AND

  OR, XOR              優先順位低い

※はAutoIT側にのみ存在

※※はUWSC側にのみ存在


コメント

- UWSC

// から行末までです


  • AutoIT

; から行末までです


行結合

- UWSC 

_ 行の最後に付ける事により次の行と結合させます

- AutoIT

_ 行の最後に付ける事により次の行と結合させます


マルチステートメント


  • UWSC

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


  • AutoIT

なし


組込み定数


  • UWSC

 TRUE    // 1

 FALSE    // 0

 NULL    // ヌルポインタ

 EMPTY   // 値の無い状態を示す

 NOTHING   // オブジェクトの無い状態を示す


  • AutoIT

 TRUE    // 1

 FALSE    // 0

 NULL    // ヌルポインタ


特殊文字


  • UWSC

 <#CR>   // 改行コードを表す

 <#DBL>  // "ダブルコーテイションを表す

 <#TAB>  // タブを表す


  • AutoIT

@CR キャリッジリターン、 Chr(13); 改行コードとして使われます。

@CRLF= @CR & @LF ;改行コードとして使われます。

@LF ラインフィード、 Chr(10); 改行コードとしてよく使われます。

@TAB Tab文字, Chr(9)


16進指定


  • UWSC

 $     // $FF =255


  • AutoIT

$dec = Dec("FFFF") ;65535を返します

$hex = Hex(1033, 4) ;"0409"を返します。


起動時パラメーター


  • UWSC

 PARAM_STR[ ]   // 配列はゼロから


  • AutoIT

$CmdLine[] ; に実行時のパラメータが入ってくる

$CmdLine[0] ; [0]にはパラメータの個数が入っている

$CmdLine[N] ; N=1~9でパラメータが入ってくる

 For $i = 1 To $CmdLine[0]

MsgBox(64, "Passed Parameters", "Parameter " & $i & ": " & $CmdLine[$i])
Next


OPTION指定


  • UWSC

 // スクリプトの先頭で宣言、各種設定の変更 (,カンマにて項目の複数指定可)

 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 でのタイトルを変更する


  • AutoIT

デフォルト

説明

MAX_LINESIZE
4095
スクリプト1行の最大サイズ

MAX_ENVSIZE
32767
ENV値の最大サイズ

WINTEXTBUFFER
32767
GetWindowTextは95環境下では65535以上の場合エラーになります。 WM_GETTEXTは32767以上の場合エラーになることがあります。

MAXCALLRECURSE
5100
Call()関数の自己再帰できる最大回数

MAXEXECUTERECURSE
5100
Execute()関数の自己再帰できる最大回数

GUI_MAXCONTROLS
65532
GUIボックス内のコントロールの最大数

GUI_MAXPOINTS
256
グラフィックインフォページでのポイントの最大数

COM_MAXEVENT
64
登録できるCOMイベントの最大数

VAR_SUBSCRIPT_MAX
64
1つの配列での要素の最大数

MAIN_TIMER_DELAY
750 ms
トレイアイコンの非表示/点滅/表示は750msごとにチェックされます。

CMDLINEPARAM_MAXLEN
4096
パラメータの文字数の最大値

TRAY_MAXITEMS
505
トレイメニュー内アイテムの最大数

TRAY_MAXEVENT
32
登録できるイベントの最大数

TRAY_TOOLTIPWIDTH
64
トレイのツールチップに表示する文字の最大数

ADLIB delay
250 ms
デフォルトでのADLIBトリガー間の待機時間(ms)。AdlibRegister()で定義可能。

以下のデフォルト値はOpt()で変更可能

MouseClickDelay 10 ms マウスクリック間の時間

MouseClickDownDelay 10 ms クリックダウンの時間

MouseClickDragDelay 250 ms マウスドラッグ動作の開始前、終了後の待機時間

TCPTimeout 100 ms TCP関数破棄後の時間


DLL 使用定義


  • UWSC

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

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

 型: int、long、bool、uint、hwnd、string、Wstring、float、double、word、dword、byte、char、pchar、Wchar、pWchar、boolean、longlong、SafeArray

 参照引数(値変更あり)の場合は Var 宣言を付ける   関数名( var double, var int )      

 構造体:型を { } にて展開して書く    関数名( double, {int, int, int} ) 

 配列の場合は型に [] を付ける      関数名( double[], int[] )

 ※int=long= bool(4byte)、dword=uint=hwnd、 char=boolean(1byte)

   ヌルポインタを渡す時は NULL定数を使用してください


  • AutoIT

DllCall DLL内の関数を動的に実行します。

DllCallbackFree DllCallbackRegisterで作成したハンドルを解放します。

DllCallbackGetPtr Win32 APIに渡すことのできるコールバック関数へのポインタを返します。

DllCallbackRegister ユーザー定義のDLLコールバック関数を作成します。

DllClose 開いているDLLを閉じます。

DllOpen DllCallで使用するためにDLLファイルを開きます。

DllStructCreate DllCallで使用するためのC/C++スタイルの構造体を作成します。

DllStructGetData 構造体の要素のデータを返します。

DllStructGetPtr 構造体、構造体の要素へのポインタを返します。

DllStructGetSize 構造体のサイズをbyte単位で返します。

DllStructSetData 構造体内の要素にデータを設定します。


スレッド生成


  • UWSC

 // スレッド生成して実行する事ができます

 THREAD 関数名()    // 関数は別スレッドにて実行される


  • AutoIT

明言せずにユーザ関数をスレッドかすることができる

子プロセスを起こした場合以下の関数で制御します

StderrRead 実行した子プロセスのSTDERRストリームを読み取ります。

StdinWrite 実行した子プロセスのSTDINストリームに指定された文字を書き込みます。

StdoutRead 実行した子プロセスのSTDOUTストリームを読み取ります。


MODULE化


  • UWSC

 // MODULE化定義をします

 MODULE モジュール名

     CONST 変数        // モジュール名.変数 にて外部からアクセス可

     PUBLIC 変数        // モジュール名.変数 にて外部からアクセス可

     DIM 変数         // 外部からアクセス不可

     PROCEDURE モジュール名  // コンストラクタ

     PROCEDURE 関数名()

     FUNCTION 関数名()

 ENDMODULE


  • AutoIT

 モジュール化の定義はありませんが、ユーザ関数ごとにファイルを生成し

 #include <外部ファイル.au3>

 のようにして読み込むことができます、読み込まれる外部スクリプトは先頭に

 #include-once

 など定義しておくことができます。


さいごに

一旦はここまで、ただ、見た限り大体のコマンドは対応するコマンドが存在しているので、移築はそんなに難しくなさそうな感じです。

次回は、関数と制御文をメインに書いていこうと思います