はじめに
すでに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
など定義しておくことができます。
さいごに
一旦はここまで、ただ、見た限り大体のコマンドは対応するコマンドが存在しているので、移築はそんなに難しくなさそうな感じです。
次回は、関数と制御文をメインに書いていこうと思います