AutoItの使い方

1. はじめに

○AutoItとは
・Windows用のいにしえのプログラム言語
・GUI(画面)の自動操作を行うことができる

○用途
・パソコン構築における手作業の自動化
・設定確認などのテストの効率化

2. 構築方法

○前提となる環境
・Windows10

○必要なインストーラ
・autoit-v3-setup.exe…AutoItのパッケージ
 →https://www.autoitscript.com/site/autoit/downloads/
 の [AutoIt Full Installation~]
・SciTE4AutoIt3.exe…AutoItプログラム用のエディタ
 →https://www.autoitscript.com/site/autoit-script-editor/downloads/

○導入の手順
①autoit-v3-setup.exeを実行し、インストールする
 [Use x86 tools~]にチェックを付けて Next >をクリックする
 [Edit the script]にチェックを付けて Next >をクリックする
 Choose Components そのまま Next >をクリックする
 Choose Install Location そのまま Installをクリックする
②SciTEAutoIt3.exeを実行し、インストールする

○SciTE日本語の文字化け回避設定
①メニューで検索してSciTEを開く

②メニューからOptions > Open User Options Fileをクリックする

③開かれた「SciTEUser.properties」に以下のコードを貼り付けて保存する
code.page=932
character.set=128

④SciTEを開きなおす

3. 使用するツールの使い方

○SciTE…左下の検索ボックスから「SciTe」で検索したらでてくると思います
・AutoItプログラム用のエディタ
・AutoItのプログラムを記述してF5で実行することができる
・[F7]キーを押下するとEXEファイルを作成できる(クリックするだけで実行できるファイルのこと)
・構文(後々出てくる)にカーソルを合わせて[F1]キーを押すとHelp画面で詳細情報を確認できる

○AutoIt Windows Info (x86)…左下の検索ボックスからAutoItで検索すると出てくると思います
・WindowsのGUI(画面)の情報を取得できるツール
・Finder Toolを調べたい場所にドラッグ&ドロップすることで
 画面情報や、ボタン等の画面要素のコントロールIDや座標を見ることができる

ドラッグ&ドロップ後、
赤枠を見ると
画面の左上のタイトル名等を確認することができる

赤枠を見ると「インストール」ボタンのコントロールIDは「Button4」であると確認できる
※コントロールID…そのボタン等の識別名のようなもの

画面下部のタブビューのVisible Textタブに移動して、
赤枠を見ると、画面上のテキストを確認することができる

画面下部のタブビューのMouseタブに移動して、
赤枠を見ると、「インストール」ボタンの座標が(343,365)であると確認できる

・画面左上を座標(0,0)とした座標を取得するよう設定を変える
初期設定だと「Screen」になっていてディスプレイ全体から見た座標を取得するようになっている。画面上の相対的な座標を取得したい場合、Options > Coord Modeの「Windows」にチェックを入れる

4. AutoItの基礎

 〇変数、定数は以下のサイト等を参考

Autoit の基礎 – 変数、定数 | Autoit で簡単なツールを作ってみよう!
変数、定数 変数 変数とは、データを一時的に記憶しておくための領域です。 変数=フォルダーと例えると分かりやすいかと思います。 この変数に固有の名前を付けたものを変数名と呼び、記憶されているデータをその変数の値と呼びます。 Autoit で

〇分岐、ループは以下のサイト等を参考

Autoit の基礎 – 条件付き命令文 | Autoit で簡単なツールを作ってみよう!
条件付き命令文 条件付き命令文は、プログラミングにとって重要になります。 条件付き命令文がなければ、プログラムを制御することができません。 条件付き命令文(If) プログラム中のある場所で次に何をどうするか?このような場合はこう動作させたい

5. AutoItの構文について

○Run構文:実行可能ファイル(EXE, BATなど)を実行する

構文:Run('実行ファイル名')
説明:Windowsアプリの場合、実行ファイル名のみでOK
   例)Run('notepad.exe')
   Windowsアプリでない場合、実行ファイルまでのパスも記述する
   例)
   Run('C:\Temp\Software\npp\npp.8.5.3.Installer.x64.exe')

○WinWait構文:画面が起動するまで待機する

構文:WinWait('tytle')
説明:画面左上のタイトル名を参照して、指定のタイトル名画面が起動するまで待機する

構文:WinWait('title','text')
説明:指定したタイトル名かつ指定したメッセージが表示されている画面が起動するまで待機する

○WinActivate構文:画面をアクティブ状態にする

構文:WinActivate('tytle')
説明:画面左上のタイトル名を参照して、指定のタイトル名画面をアクティブ状態にする

○ControlSend:画面に文字を入力する

構文:ControlSend('tytle','text','ControlID','String','flag')
説明:画面上の指定箇所に文字を入力する
   tytle:入力したい画面のタイトル名
   text:入力したい画面上のメッセージ
   (tytleと合わせて画面を絞り込みしたいときに使う)
   ControlID:入力したい要素を指定したい場合
         その要素のコントロールIDを指定する
   String:入力したい文字
   flag:0→特殊な文字でキー入力をしたい場合使う、1→そのまま入力する
   (Ctrlキーを入力したい場合→^、TABキーを入力したい場合→{TAB} など
    詳細は以下のサイトを参照してください
    https://open-shelf.appspot.com/AutoIt3.3.6.1j/html/functions/Send.htm)

○ControlClick:画面上の要素をクリックする

構文:ControlClick('title','text','ControlID')
説明:画面上の指定箇所をクリックする
    title:クリックしたい画面のタイトル名
    text:クリックしたい画面上のメッセージ
    ControlID:クリックしたい画面要素のコントロールID

○ControlCommand:画面上の要素を操作する

構文:ControlCommand('title','text','ControlID','command',['item'])
説明:画面上の指定箇所にcommandで指定した操作を行う
   title:操作したい画面のタイトル名
   text:操作したい画面上のメッセージ
    (tytleと合わせて画面を絞り込みしたいときに使う)
   ControlID:操作したい画面要素のコントロールID
   command:操作内容を指定する
   item:commandで指定する内容がある場合ここで指定する
      指定するものがなければ省略できる

commandの詳細
https://open-shelf.appspot.com/AutoIt3.3.6.1j/html/functions/ControlCommand.htm

command:SelectString
説明:指定した画面要素からitemに指定したテキストを選択しアクティブ状態にする

command:Uncheck
説明:指定した画面要素のチェックを外す

6. 役立ちそうな構文メモ

構文のみで詳細な説明はありません。SciTe上で[F1]キーから確認できます。

■コメントを書く(プログラムの説明のこと、コメント部分に何を書いてもエラーにならない)
①一行コメント
;先頭に ; でコメント

②複数行コメント
#cs
複
数
行コメント
#ce

■一定時間の停止/待機
①指定のミリ秒数待機する(今回は1000ミリ秒待機)
 Sleep(1000)

②指定のタイトル名の画面が表示されるまで待機
 WinWait('タイトル名')

③指定のタイトル名の画面に指定のメッセージが表示されるまで待機
 WinWait('タイトル名', '指定メッセージ')

④指定のタイトル画面をアクティブにする
 WinActivate('タイトル名')

⑤指定のタイトル画面が消えるまで一時待機
 WinWaitNotActive('タイトル名')

■ダイアログ/メッセージ
①MsgBox('flag', 'タイトル名', 'ダイアログだよ')
 flagの数値でダイアログの画面内容が変わる 0の場合、OKボタンが表示される
→https://open-shelf.appspot.com/AutoIt3.3.6.1j/html/functions/MsgBox.htm

■実行ファイルの起動
①実行ファイルのパスを指定して起動
構文)Run('実行ファイルのパス')
 例)Run('C:\Temp\AdobeInstaller.exe')

②Windowsアプリは実行ファイル名のみで起動できる
構文)Run('実行ファイル名')
 例)Run('notepad.exe')

③AutoItスクリプト自身が格納されたフォルダ内の実行ファイルを起動
構文)Run('@ScriptDir & '\実行ファイル名')
 例)Run(@ScriptDir & '\AdobeInstaller.exe')

■キー送信
① TABキー を押す(TABキー送信で別の画面の要素をアクティブ状態にできる)
Send('{TAB}')

② 指定した文字を送信
Send('やっほー')

③ 指定のタイトル画面が出たら入力する
  引数でキーの入力形式を指定できる
   0:特殊文字を考慮する,1:そのまま入力する
 →参考サイトhttps://open-shelf.appspot.com/AutoIt3.3.6.1j/html/functions/Send.htm
WinActivate('タイトル名')
Send('やっほー',1)

④ クリップボートに文字を入力し、Ctrl+Vでメッセージを張り付ける
ClipPut('やっほー')
WinActivate('タイトル名')
Send('^V')

⑤ 指定したタイトル名の画面の指定コントロールIDに入力する
ControlSend('タイトル名', '', 'Edit1', 'やっほー')
ControlSetText('タイトル名', '', 'Edit1', 'やっほー')

■マウス移動 & クリック
① マウスの座標モード変換 0指定でアクティブ画面の相対的座標になる
  画面の相対的な座標を取得する場合、プログラムの初めに記述しておく必要あり
AutoItSetOption('MouseCoordMode', 0)

②マウスの横100、縦200に移動して左クリック
 left:左
クリック、middle:中央 (ホイールクリック)
、right:右クリック
MouseClick('left', 100, 200, 1)

③マウスの横100、縦200に移動して左ダブルクリック
MouseClick('left', 100, 200, 2)

④マウスの横100、縦200に移動して左クリック、速度10
MouseClick('left', 100, 200, 1,10)

⑤指定のタイトルが現れるまで待ち、指定の座標をクリック
WinActivate('タイトル名')
MouseClick('left', 43, 171, 1, 0)
                      x    y
⑥ 指定のタイトル画面上の指定のコントロールIDをクリック
ControlClick('タイトル名', '', 'Button1')

⑦ 指定のタイトル画面上の指定のコントロールIDのチェックを外す
ControlCommand('タイトル名', '', 'Button1', 'UnCheck')

⑧アクティブ画面上のキー送信による移動
WinActivate('タイトル名')
Send(' {TAB}{TAB}{TAB} ')
Send(' {TAB}{HOME}{DOWN}{DOWN}')

⑨複数の条件による指定
ControlClick('タイトル名', '', '[CLASS:Button; TEXT:OK; INSTANCE:1]')

⑩コンボボックスの選択
ControlCommand('タイトル名','','ComboBox1','SelectString','アイテム名'))


■新しいファイルを作成する
①実行するau3 ファイルがあるフォルダに作成する
FileOpen(@ScriptDir & '\テキスト.txt',1)  
FileOpen('r:\テキスト.txt',1)


■関数化することもできる
①メモ帳を開く関数
StartNotepad() ; ここで呼び出し

Func StartNotepad()
	Run('notepad.exe')
EndFunc

②電卓を開き計算する関数→これ上手く動かない
StartCalc() ; ここで呼び出し

Func StartCalc()
	Run('calc.exe')
	WinWaitActive('Calculator')
	Send('1234*2=')
EndFunc

③引数有り ※引数が一つしかない場合、2番目の引数は0となる
MsgBox(0,'Result',getdata(1)) ;ここで呼び出し

Func getdata($a,$b=0)
	return $a + $b
EndFunc


■その他
① アクティブな画面のタイトルを取得する
WinGetTitle('[active]') 

② アクティブな画面の位置を取得
WinGetPos("[active]")

Comments

Copied title and URL