[MEMO] AutoIt! で簡単GUI &アプリ自動操作
2010.02.27 Saturday 13:38
GUIアプリの自動操作ソフトとして UWSC を昔使っていたことがある.最近 AutoIt 3 というソフトでも似たようなことができると知って少し使ってみた.
UWSCに比べて気に入った点:
1. GUIが比較的容易に作れる.(外部GUIエディタ有り)
2. スクリプトとエンジンを組み合わせた単体実行ファイルにコンパイルできる.
上記2つの特性より,CUIスクリプトの入力用画面を作る目的に使うと便利そうだと感じた.
UWSCに比べて気に入った点:
1. GUIが比較的容易に作れる.(外部GUIエディタ有り)
2. スクリプトとエンジンを組み合わせた単体実行ファイルにコンパイルできる.
上記2つの特性より,CUIスクリプトの入力用画面を作る目的に使うと便利そうだと感じた.
以下ほとんど自分メモ
[インストール]
AutoIt 3をDownloadページからFull Installationダウンロードしてインストールする.さらに,全部入りエディタを利用するために,AutoIt Script Editor よりインストーラ SciTE4AutoIt3.exe をダウンロードしてインストールする.(別途ダウンロードしたエディタでは,Toolメニューに各種マクロがたくさん登録されている.)
初期状態では日本語が文字化けするので,Tools→SciTe Config を開き,General Settingの一番下にある AU3 Font settings で[Change]ボタンを押してMSゴシック等のフォントを選択する.左下のUPDATEボタンを押すと即座に設定が反映される.
GUIはTk等のようにオブジェクト構築をプログラムで書かなくてはならないが,Koda(Form Designer)を使うとDelphi風編集画面でGUIレイアウトを作成できる.Toolメニューの中のKoda(Form Designer)より編集画面を開き,パネル上にGUI部品を乗せてプロパティを設定する.その後Generate Code(F9)で生成されたコードをソースに貼り付ければよい.
実行及びexeへのコンパイルはエディタのToolメニューよりGo, Buildメニューで行う.
[スクリプト言語について]
Basic風だけど微妙に違うところがあるので,Language Referenceは一応目を通した方がよい.Perlのような弱い型付け言語で数値←→文字列の暗黙の変換があるため,比較演算子が文字列用と数値用で別々に用意されている.=は数値の,==は文字列の比較というあたり,他の言語と異なる(Perlとも異なる)上,間違ってもエラーにならないので注意が必要.
変数は $ で始まる.
システム変数が「マクロ」として用意されている.マクロは @ で始まる.
@ProgramFilesDir, @AppDataDir, @CRLF, @TAB 等
クラスを扱えないのが惜しいが,Arrayを入れ物として使ってアクセスメソッドを用意すればグローバル変数の利用は避けられそうだ.
空の配列を作る方法がどうしても分からなかった.Dim $array[0] はエラーになってしまう.しょうがないので要素0は使わないことにしたが,もうちょっとうまい方法はないものか.
配列の最大値はUBound()で取得可能.
[GUI]
Kodaで画面を作ってスクリプトを貼る.生成されるコードはメッセージループ月の物なので,必要に応じてそれを関数の中に入れる.簡単な物であれば,メッセージループのSwitch-Case分にメッセージ処理を追記すれば事足りる.
FormのStylesでWS_THICKFRAMEにチェックを入れるとウィンドウがリサイズ可能になる.フォームの上に配置したコントロールもリサイズに追従してサイズが変わるところは良くできている.
リストボックスの横スクロールバーは _GUICtrlListBox_SetHorizontalExtent() で横幅を明示的に設定する必要有り.単位は文字数じゃなくてピクセル数.
ウィンドウの属性値 $WS_ACCEPT_FILES を設定するとエクスプローラからファイルのDrag & Dropを受け入れられる.$GUI_EVENT_DROPPED メッセージに応答して @GUI_DRAGFILE マクロでファイル名を取得できるのだが,複数ファイルの受け取り方が分からない.Forumの書き込みによると,自分でDragQueryFiles APIを呼び出さないといけないみたい.
[画面操作]
タイトルやクラス名からのウィンドウの特定,コントロールへボタン押下,テキスト設定,メッセージ送信等が用意されている.
ウィンドウの特定は,タイトルと文字列の組み合わせで行う.タイトルはウィンドウCaption,WinGetHandle() で取得したハンドル,[]で囲んだクラス名等で行うことができる.文字列はWindow中から抽出した文字列の一部を指定するもので,タイトルが同じウィンドウを識別するための物である.
ウィンドウ内のコントロールはさらにIDで指定する.IDはWindowsが付与する数値か[]で囲んだ属性値で指定が可能であるが,IDの絶対指定は避けた方がよい..NETアプリでは(?)起動する度に付与されるIDが変わってしまった.
操作対象ウィンドウの情報はAuto It v3 Window Infoで得ることができる.(エディタではTool → AU3Info) FinderToolをドラッグして目的のウィンドウの上に持って行くと情報が見える.Summaryタブの Advanced(Class): の部分がそのままコントロールのIDとして使用できる.(文字列なので二重引用符で囲む必要はあるが)
[ライブラリ]
組み込み関数以外にライブラリが添付されている.ライブラリを使うにはCのように
リファレンスを見る限り,データ構造やGUI操作以外にネットワーク,スクリーンキャプチャ,サウンド,SQLite,Word/Exce 等実用的な物が色々と含まれている.AutoIt単体でもかなりのことができそうだ.
[インストール]
AutoIt 3をDownloadページからFull Installationダウンロードしてインストールする.さらに,全部入りエディタを利用するために,AutoIt Script Editor よりインストーラ SciTE4AutoIt3.exe をダウンロードしてインストールする.(別途ダウンロードしたエディタでは,Toolメニューに各種マクロがたくさん登録されている.)
初期状態では日本語が文字化けするので,Tools→SciTe Config を開き,General Settingの一番下にある AU3 Font settings で[Change]ボタンを押してMSゴシック等のフォントを選択する.左下のUPDATEボタンを押すと即座に設定が反映される.
GUIはTk等のようにオブジェクト構築をプログラムで書かなくてはならないが,Koda(Form Designer)を使うとDelphi風編集画面でGUIレイアウトを作成できる.Toolメニューの中のKoda(Form Designer)より編集画面を開き,パネル上にGUI部品を乗せてプロパティを設定する.その後Generate Code(F9)で生成されたコードをソースに貼り付ければよい.
実行及びexeへのコンパイルはエディタのToolメニューよりGo, Buildメニューで行う.
[スクリプト言語について]
Basic風だけど微妙に違うところがあるので,Language Referenceは一応目を通した方がよい.Perlのような弱い型付け言語で数値←→文字列の暗黙の変換があるため,比較演算子が文字列用と数値用で別々に用意されている.=は数値の,==は文字列の比較というあたり,他の言語と異なる(Perlとも異なる)上,間違ってもエラーにならないので注意が必要.
変数は $ で始まる.
システム変数が「マクロ」として用意されている.マクロは @ で始まる.
@ProgramFilesDir, @AppDataDir, @CRLF, @TAB 等
クラスを扱えないのが惜しいが,Arrayを入れ物として使ってアクセスメソッドを用意すればグローバル変数の利用は避けられそうだ.
空の配列を作る方法がどうしても分からなかった.Dim $array[0] はエラーになってしまう.しょうがないので要素0は使わないことにしたが,もうちょっとうまい方法はないものか.
配列の最大値はUBound()で取得可能.
[GUI]
Kodaで画面を作ってスクリプトを貼る.生成されるコードはメッセージループ月の物なので,必要に応じてそれを関数の中に入れる.簡単な物であれば,メッセージループのSwitch-Case分にメッセージ処理を追記すれば事足りる.
FormのStylesでWS_THICKFRAMEにチェックを入れるとウィンドウがリサイズ可能になる.フォームの上に配置したコントロールもリサイズに追従してサイズが変わるところは良くできている.
リストボックスの横スクロールバーは _GUICtrlListBox_SetHorizontalExtent() で横幅を明示的に設定する必要有り.単位は文字数じゃなくてピクセル数.
ウィンドウの属性値 $WS_ACCEPT_FILES を設定するとエクスプローラからファイルのDrag & Dropを受け入れられる.$GUI_EVENT_DROPPED メッセージに応答して @GUI_DRAGFILE マクロでファイル名を取得できるのだが,複数ファイルの受け取り方が分からない.Forumの書き込みによると,自分でDragQueryFiles APIを呼び出さないといけないみたい.
[画面操作]
タイトルやクラス名からのウィンドウの特定,コントロールへボタン押下,テキスト設定,メッセージ送信等が用意されている.
ウィンドウの特定は,タイトルと文字列の組み合わせで行う.タイトルはウィンドウCaption,WinGetHandle() で取得したハンドル,[]で囲んだクラス名等で行うことができる.文字列はWindow中から抽出した文字列の一部を指定するもので,タイトルが同じウィンドウを識別するための物である.
ウィンドウ内のコントロールはさらにIDで指定する.IDはWindowsが付与する数値か[]で囲んだ属性値で指定が可能であるが,IDの絶対指定は避けた方がよい..NETアプリでは(?)起動する度に付与されるIDが変わってしまった.
操作対象ウィンドウの情報はAuto It v3 Window Infoで得ることができる.(エディタではTool → AU3Info) FinderToolをドラッグして目的のウィンドウの上に持って行くと情報が見える.Summaryタブの Advanced(Class): の部分がそのままコントロールのIDとして使用できる.(文字列なので二重引用符で囲む必要はあるが)
[ライブラリ]
組み込み関数以外にライブラリが添付されている.ライブラリを使うにはCのように
#include <ファイル名.au3>という宣言が必要になる.
リファレンスを見る限り,データ構造やGUI操作以外にネットワーク,スクリーンキャプチャ,サウンド,SQLite,Word/Exce 等実用的な物が色々と含まれている.AutoIt単体でもかなりのことができそうだ.
Comments