LoginSignup
54
70

More than 5 years have passed since last update.

AutoIT 3 で RPA(クラス1)をやってみよう

Last updated at Posted at 2018-06-29

はじめに

RPA(Robotic Process Automation)のクラス1というのは、単純・定型作業の自動化です。
今回使用する、AutoITは海外ではかなり有名な自動化ツールで、オライリーから書籍が出ていたりします。
ちなみに、難易度的には、SIer向け、覚えることが結構あるのが難点です。

インストール

AutoIt オフィシャルサイト のダウンロードから以下の3つを取得します

  • 本体
    AutoIt Full Installation autoit-v3-setup.exe
    これがないと始まらない、32bit版/64bit版があるけど、インストーラは共通

  • エディタ
    AutoIt Script Editor SciTE4AutoIt3.exe
    AutoIT用のエディタ、別にAtomとか好きなものを使っても構わない。

  • レコーダ
    AutoIT-Self Installer with ScriptWriter(AU3record) autoit-v3.3.14.0.zip
    ※なぜか最新パッケージに含まれなくなってしまった、マクロ記録ツール、ユーザの操作を記録してマクロにしてくれます。コントロールIDなどがわかりにくいときに非常に便利。

本体とエディタはインストーラを動かせば、問題なく導入できるはず。
レコーダだけは、圧縮ファイルを展開し、内部のinstall\Extras\Au3Recordにある
ASWhook.dll
Au3Record.exe

の2つのファイルをSciTEのインストール先にコピーしておく。

操作をより広い範囲で使えるようにする、周辺ツール

基本的に、OSが操作できる部分までしか、コントロールできないので、WEBに対して操作を行うような場合は、以下のようなブラウザに制御を渡すようなツールが必要になる

画像認識をするためのAutoITの拡張ライブラリ、32bit/64bitで多少挙動が変わる、画像判定をする場合必需品

OSSのOCRツール、ライブラリを用意すれば日本語も行ける。

AutoITの命令をChromeに渡すChrome拡張

Chrome Messageing APIを利用したコマンド受信ホスト

かなり有名な独自マクロ、JSベースのプラウザテストツール

単体でも動作する、CUIなRPAの一種、ブラウザの制御ができる

VBAからSeleniumを使うためのラッパーだが、汎用ライブラリとして使えるため、AutoITからも呼べるし、AutoIT用のサンプルも用意されている
with SeleniumDriverこちら
Seleniumからブラウザを操作する際に必要になる、ドライバ、上記のものに含まれているものだと最新ブラウザに対応していないので、差し替える必要がある

AutoITのこれだけは覚えておくといいことと、構文集

- 覚えておくと、楽にスクリプトが作れること

詳しいことは、有志が作っている日本語訳 本体 / UDF / X を一読するのをお勧めする。
特に、本体の翻訳はハンドブックの代わりに使えるので、ローカルにクローンしておくのがおすすめ。

まず、汎用スクリプトを作るうえで、アプリケーションの実行ファイルやControl ID、クラス名が必要になることがあるので、これは、AutoIT本体に含まれている、AutoIT Window Infoというツールで調べることができる。

aiw.png

aiw_finder.pngをマウスで、調べたいウインドウのボタンや入力窓にD&Dするとクラス名やControlIDが表示される。

また、アプリケーションのメニューなど、プルダウンしてサブメニューを開くようなものの場合、aiw_finder.pngFinderToolが使えないことがあるので、その場合は、Au3Record.exeを使うとよい。

a3r.png

こちらは、a3r_rec.png ボタンを押してから、アプリの操作をすると、操作からAU3スクリプトを生成してくれる。

a3r2.png

これは、タスクバーに常駐しているSakuraEditorをクリックして、新規テキストを作り、お決まりの「Hello World !!」と入力した作業を記録させたもの。[Save As]で保存して、[AutoIT]から[Run Script]すると記録した動作を再現してくれる。AutoIT Window Infoに頼れない場合はこちらがいいと思う。

  • 次に覚えておけば、繰り返しで何とか簡単な自動化ができる・・・と思う構文一覧。

特殊制御文字

'!' = ALTキー   : ALT+A なら !a と書ける
'+' = SHIFTキー : SHIFT+a なら +a と書ける
'^' = CTRLキー  : CTRL+C なら ^c と書ける
'#' = Winキー   : Windows + Dなら #d と書ける

仮想キー

Rawモードで送信したとき 送信される文字
{!} !
{#} #
{+} +
{^} ^
{{} {
{}} }
{SPACE} SPACE
{ENTER} メインキーボードのENTER キー
{ALT} ALT
{BACKSPACE} or {BS} BACKSPACE
{DELETE} or {DEL} DELETE
{UP}
{DOWN}
{LEFT}
{RIGHT}
{HOME} HOME
{END} END
{ESCAPE} or {ESC} ESCAPE
{INSERT} or {INS} INS
{PGUP} PageUp
{PGDN} PageDown
{F1} - {F12} Function キー
{TAB} TAB
{PRINTSCREEN} Print Screen キー
{LWIN} Left Windows キー
{RWIN} Right Windows キー
{NUMLOCK on} NUMLOCK (オン/オフ/切り替え)
{CAPSLOCK off} CAPSLOCK (オン/オフ/切り替え)
{SCROLLLOCK toggle} SCROLLLOCK (オン/オフ/切り替え)
{BREAK} Ctrl+Break処理
{PAUSE} PAUSE
{NUMPAD0} - {NUMPAD9} テンキー 数字
{NUMPADMULT} テンキー *
{NUMPADADD} テンキー +
{NUMPADSUB} テンキー -
{NUMPADDIV} テンキー /
{NUMPADDOT} テンキー ピリオド
{NUMPADENTER} テンキーのEnter キー
{APPSKEY} Windows App キー
{LALT} 左 ALT キー
{RALT} 右 ALT キー
{LCTRL} 左 CTRL キー
{RCTRL} 右 CTRL キー
{LSHIFT} 左 Shift キー
{RSHIFT} 右 Shift キー

次のようにして同じキーを繰り返し送信することができます。

 Send("{DEL 4}") ;DELキーを4回押す
 Send("{S 30}") ;30個の文字'S'を送信する
 Send("+{TAB 4}") ;SHIFT+TABを4回押す

送信回数に0を指定してもキーは必ず1回は送信されます。
キーを押し続ける場合(一般にはゲームでしか利用されません)

 Send("{a down}") ;A キーを押し続けます
 Send("{a up}") ;A キーを離します

capslock、numlock、scrolllockキーの状態を設定します。

 Send("{NumLock on}") ;NumLockキーをオンにします。
 Send("{CapsLock off}") ;CapsLockキーをオフにします。
 Send("{ScrollLock toggle}") ;ScrollLockの状態を切り替えます。

関数ブロックの最初と最後を明記する。なお、エディタで可視性をよくするために使う感じなので書かなくてもいい
書いておくとエディタでたたむことができるようになる

#region --コメント--

#endregion

プログラムを実行する、返り値はTrue:成功/False:失敗

Run ( "program" [, "workingdir" [, show_flag [, opt_flag]]] )
;例
Run ("EXCEL.EXE","%ProgramFiles%\Microsoft Office\")

アプリ名のついたウインドウが出るまで、待つ。RunWaitより可視性がよい

WinWait("アプリ名")

Forで繰り返し処理

For <variable> = <start> To <stop> [Step <stepval>]
statements
Next

;例

For i = 1 To 10 Step 1
 ControlSend ( "無題 - メモ帳", "", "" , "^v" , 0 )
Next

Whileで繰り返し
例は
条件が成立している間ループ($iが10以下の間)してコンソールに出力
よくある条件としては、特定のキーが押されるまでループするとかがありますね

While <expression>
 statements
WEnd
;例
Local $i = 0
While $i <= 10
    ConsoleWrite ( $i )
    $i = $i + 1
WEnd

もし、条件 であれば、処理を実行。

If 条件 Then 処理

;例
If WinActive("アプリ名","") Then WinClose("アプリ名","")

もし、条件 でなければ、処理を実行。

If Not 条件 Then 処理

;例
If Not WinActive("アプリ名","") Then WinActivate("アプリ名","")

選択したアプリのボタンなどのコントロールにIDを直接指定してクリックを送信
単純に座標を指定してクリックする場合はMouseClick、移動はMouseMove、がある

ControlClick ( "title", "text", controlID , "buttonname" , "clicks" , x , y )
;例
ControlClick ( "電卓", "", 131 , "left" , 1 ) ; 電卓 の Control ID 131 [1]のボタンを1回押す

選択したアプリのボタンなどのコントロールにIDを直接指定して文字列やキーを送信する
単純に現在アクティブになっているウインドウに文字列やキーを送信する場合はSendを使う

ControlSend ( "title", "text", controlID, "string" , flag )
;例
ControlSend ( "無題 - メモ帳", "", "" , "^v" , 0 ) ; CTRL + V を送信する

これだけ覚えておけば、最低限のコピペ自動化作業とか単純作業くらいはできる…はず!!

54
70
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
70