AutoITを使ってWindows操作を自動化する

PowerShellを使って運用を自動化してきたのですが、どうにもクリックをしないと操作できないアプリが出てきたので、AutoITを使って自動化する方法を試してみました。


AutoITの入手

何はともあれ、入手しないことには話が始まりません。

公式ページから「AutoIt Full Installation」を選んでダウンロードします。
下記リンクからいけます。

AutoIt Downloads

AutoITをそのまま使うことを考えていたんですが、サーバやPCにinstallして回る必要があります。

「EXE化して配れる」とのことなので、Hello Worldプログラム作ってCompileしたらMcAfeeが即座に「トロイの木馬」と判断していきなり隔離。つ、つかえねぇ…。

インストールしない場合は、レジストリに登録してオブジェクト作ってメソッド叩けば動かせるという情報が出てきます。でも、「サーバにレジストリ登録して回るのもなぁ」って思っていたところ、PowerShellで使えると公式に書いてありました。

AutoIt Cmdlets for Windows PowerShell

が、ちょっとPowerShell2.0世代の記述らしくそのままやるとうまく動かなかったので、動かすまでをメモしときます。

ModuleをImportする

公式の解説には

Import-Module .\AutoItX.psd1

って書いてあるんですが、このコマンドでは動きません。

Install先にあるAutoITXを$env:PSModulePathが通っている場所にコピーします。
Installerではなくzipで入手した場合は、installフォルダの中にあります。

私は普段はsystem32のフォルダにModuleを入れています。

C:\windows\system32\WindowsPowerShell\v1.0\Modules

ただ、ここは自動Importらしいのでウィルスのトラウマからここはやめておきます😓

Program Filesなら全ユーザから呼び出せて都度Importで使えそうです。

C:\Program Files\WindowsPowerShell\Modules

ここにコピーした上で、下記コマンドを実行します。

Import-Module AutoItX

エラーメッセージが出なかったので、動きそうです。

メモ帳を動かす

ここからはチュートリアルに従って動かして行きます。Invoke-AU3Runコマンドレッドでプログラムが起動します。

Invoke-AU3Run -Program notepad.exe

こうすると、新しいメモ帳のWindowsが上がってきます。
日本語の新規ウィンドウタイトルを指定して、Windowsが上がってくるのを待機します。

$notepadTitle ="無題 - メモ帳"
Wait-AU3Win -Title $notepadTitle

上がってきたWindowのタイトルを指定して、ハンドルを取得します。

$winHandle = Get-AU3WinHandle -Title $notepadTitle

ハンドルを取得すると、以後このウィンドウをハンドル指定で操作できます。

ハンドルって何?って方はこちらをどうぞ
ハンドルを理解する -MSDN

ウィンドウのハンドルが取れたことを確認するため、下記コマンドを実行するとWindowがActiveになります。

Show-AU3WinActivate -WinHandle $winHandle

コントロールのハンドルを取得する

Windowの中のボタンや入力部分などを指定するためにはコントロール名を指定してやります。コントロール名を調べるためには、付属のAU3Info.exeを使いましょう。

起動するとこんな画面が上がってきます。

Finder Toolと書かれたところのアイコンを調べたい部品にドラッグドロップします。

ドラッグするとアイコンが変わるので、これをメモ帳のエディタ部分にアイコンをドロップします。

フォーカスがあたっている部分が太枠になってClassがEdit,Instanceが1となるのが見えると思います。つまり、Edit1というコントロール名がついています。

$controlHandle = Get-AU3ControlHandle -WinHandle $winhandle -Control "Edit1"

こうしてやると、メモ帳のエディタ部分のコントロールハンドルが取れます。
すると、次にこのコントロールに対してテキスト入力ができるようになります。

Set-AU3ControlText -ControlHandle $controlHandle -NewText "Hello! This is being controlled by AutoIt and PowerShell!" -WinHandle $winHandle

英語版チュートリアルでは仮想キーボードの話が続くんですが、PowerShellでAutoITを動かすのが目的なのでここまでにします。

同じウィンドウタイトルがあった場合

先程のチュートリアルでは自分でメモ帳を起動しているので同じウィンドウタイトルは一個しかない訳ですが、実際の自動化では同じウィンドウタイトルを識別する必要も出てきます。

そんなときは-Textオプションに文字を指定することで「見えている文字」をパターン処理して同定してくれます。ボタンの文字だと「次へ」とか「Button1」とか同じ名前がでてくるので「ウィンドウタイトルは○○で、テキストに「××」があるウィンドウの中でコントロール名が「Button1」」とか指定してやると、うまく特定できました。

ハンドルを経由しなくても、Invoke-AU3ControlClickコマンドで直接クリックを流すことも出来るようです。

Invoke-AU3ControlClick -Title "○○" -Text "××" -Control "[CLASSNN:Button1]"

さらなる参考文献

PowerShellコマンドの日本語テキストは無いようなので、まずは開発機でAutoITのスクリプトを.au3形式で作成してPowerShellに移植するのが初心者には良いんじゃないでしょうか。

AutoITのマニュアルはblackcodeさんが日本語訳を作ってくださっています。
AutoIt v3 ドキュメント 日本語訳プロジェクト -実験記録 No.02

PowerShell遣い以外の方はこちらも参考になると思います。
JavaScript、Perl、Python、Ruby、VBS でAutoItを使ってみる -実験記録 No.02

動作させるためには下記も参考にどうぞ


 

Excelマクロの操作記録のような操作録画機能もあるのですが、マウスクリックがWindowsの中での座標指定だったりうまくいく気がしないので、ちゃんとオブジェクトを理解してScript組むほうが結局は早道だと思います。

無償ツールでここまで自動化できるなら有償のRPAツールなんて要らないんじゃないかって思います。

AutoITを使ってWindows操作を自動化する” に対して1件のコメントがあります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください