AutoITでWindows操作を自動化して無料RPAを実現しよう!
AutoITという自動化ツールがあります。マウスクリックとかキーボード操作とかを実行できるので実態的にWindows操作を自動化できます。有償のRPAのようなGUIでの設定ではありませんがちょっと頑張れば無料RPAが実現できます!
AutoITとは
Windowsに対して「このボタンをクリック」とか「このウィンドウにCrtl+Sを送信」とかが実現できるScript型言語です。「言語かよ」って思うかもしれませんが割と平易な手続き型言語です。
GUI付きRPAでもちょっと複雑なことをすると分岐やLoopが必要で長大な処理をするとGUIでは全体が見通せないメンテナンスしづらいものになってしまいます。現場で構築させるなら数ステップくらいとかにしておかないと。
AutoITをおすすめする理由
- 1999年v1.0リリースで安定している。
- 英語の(検索する気があればだけど)事例情報も多い。
- AutoITXというCOMオブジェクトが提供されていて多言語から呼び出して使える。新たに言語を覚える必要がない。
JavaScript、Perl、Python、Ruby、VBS でAutoItを使ってみる -実験記録 No.02 - Powershellのコマンドレットが提供されているので、Importするだけで使える。
もしイチから覚えるのであればPythonかPowershellをおすすめします。
Python:ライブラリが多くオープンソース有志の活動も活発。AI関連のライブラリも多く将来的にそっちも目指すなら。
Powershell:Microsoft公式でWindowsに標準でinstallされているため管理が楽。登場時(2003)は産廃とまで言われましたが(笑)Windows10に付属されている5.1以降であればちゃんと使えます。
逆にAutoITをそのまま使うのはおすすめしません。
- コンパイル(EXE化)して配布しようすると高確率でアンチウィルスソフトにひっかかる。(フィッシングウィルスなどを容易に作れる言語だからのようです。)
- ウィルス検知を避けようとするとすべての管理PCにインストールして回る必要がある。管理が大変。
この記事では管理のかんたんなPowershellでの活用を紹介していきます。
AutoITの入手
何はともあれ、入手しないことには話が始まりません。
公式ページから「AutoIt Full Installation」を選んでダウンロードします。
下記リンクからいけます。
またPowerShellで使えると公式に情報があります。
が、ちょっとPowerShell2.0世代の記述らしくそのままやるとうまく動かなかったので、動かすまでをメモしときます。
ModuleをImportする
公式の解説には
1 |
Import-Module .\AutoItX.psd1 |
って書いてあるんですが、このコマンドでは動きません。
Install先にあるAutoITXを$env:PSModulePathが通っている場所にコピーします。
Installerではなくzipで入手した場合は、installフォルダの中にあります。
私は普段はsystem32のフォルダにModuleを入れています。
1 |
C:\windows\system32\WindowsPowerShell\v1.0\Modules |
ただ、ここは自動Importらしいのでウィルス検知とか色々こわいのでここはやめておきます😓
Program Filesなら全ユーザから呼び出せて都度Importで使えます。
1 |
C:\Program Files\WindowsPowerShell\Modules |
ここにコピーした上で、下記コマンドを実行します。
1 |
Import-Module AutoItX |
メモ帳を動かす
ここからはチュートリアルに従って動かして行きます。Invoke-AU3Runコマンドレッドでプログラムが起動します。
1 |
Invoke-AU3Run -Program notepad.exe |
こうすると、新しいメモ帳のWindowsが上がってきます。
日本語の新規ウィンドウタイトルを指定して、Windowsが上がってくるのを待機します。
1 2 |
$notepadTitle ="無題 - メモ帳" Wait-AU3Win -Title $notepadTitle |
上がってきたWindowのタイトルを指定して、ハンドルを取得します。
1 |
$winHandle = Get-AU3WinHandle -Title $notepadTitle |
ハンドルを取得すると、以後このウィンドウをハンドル指定で操作できます。
ハンドルって何?って方はこちらをどうぞ
ハンドルを理解する -MSDN
ウィンドウのハンドルが取れたことを確認するため、下記コマンドを実行するとWindowがActiveになります。
1 |
Show-AU3WinActivate -WinHandle $winHandle |
コントロールのハンドルを取得する
Windowの中のボタンや入力部分などを指定するためにはコントロール名を指定してやります。コントロール名を調べるためには、付属のAU3Info.exeを使いましょう。
起動するとこんな画面が上がってきます。
Finder Toolと書かれたところのアイコンを調べたい部品にドラッグドロップします。
ドラッグするとアイコンが変わるので、これをメモ帳のエディタ部分にアイコンをドロップします。
フォーカスがあたっている部分が太枠になってClassがEdit,Instanceが1となるのが見えると思います。つまり、Edit1というコントロール名がついています。
1 |
$controlHandle = Get-AU3ControlHandle -WinHandle $winhandle -Control "Edit1" |
こうしてやると、メモ帳のエディタ部分のコントロールハンドルが取れます。
すると、次にこのコントロールに対してテキスト入力ができるようになります。
1 |
Set-AU3ControlText -ControlHandle $controlHandle -NewText "Hello! This is being controlled by AutoIt and PowerShell!" -WinHandle $winHandle |
英語版チュートリアルでは仮想キーボードの話が続くんですが、PowerShellでAutoITを動かすのが目的なのでここまでにします。
同じウィンドウタイトルがあった場合
先程のチュートリアルでは自分でメモ帳を起動しているので同じウィンドウタイトルは一個しかない訳ですが、実際の自動化では同じウィンドウタイトルを識別する必要も出てきます。
そんなときは-Textオプションに文字を指定することで「見えている文字」をパターン処理して同定してくれます。ボタンの文字だと「次へ」とか「Button1」とか同じ名前がでてくるので「ウィンドウタイトルは○○で、テキストに「××」があるウィンドウの中でコントロール名が「Button1」」とか指定してやると、うまく特定できました。
ハンドルを経由しなくても、Invoke-AU3ControlClickコマンドで直接クリックを流すことも出来るようです。
1 |
Invoke<span class="sy0">-</span>AU3ControlClick -Title "○○" -Text "××" -Control "[CLASSNN:Button1]" |
さらなる参考文献
PowerShellコマンドの日本語テキストは無いようなので、まずは開発機でAutoITのスクリプトを.au3形式で作成してPowerShellに移植するのが初心者には良いんじゃないでしょうか。
AutoITのマニュアルはblackcodeさんが日本語訳を作ってくださっています。
AutoIt v3 ドキュメント 日本語訳プロジェクト -実験記録 No.02
2020年現在、ほとんどの方は64bitOSで動いていると思います。古いサイトに記載されている登録方法では動かないことがあるので、動作させるためには下記も参考にどうぞ。
Excelマクロの操作記録のような操作録画機能もあるのですが、マウスクリックがWindowsの中での座標指定だったりうまくいく気がしないので、ちゃんとオブジェクトを理解してScript組むほうが結局は早道だと思います。
無償ツールでここまで自動化できるなら有償のRPAツールなんて要らないんじゃないかって思ってます。
“AutoITでWindows操作を自動化して無料RPAを実現しよう!” に対して5件のコメントがあります。