仕事柄、アプリケーションの自動化をやることが多々あるのだが、今まではWin32API叩いたり、AutoITを使ったりしてきた。
Win32APIネイティブのアプリだったり、.NET Frameworkで作ったWinFormsアプリだったりならSpy++とかAutoIt Infoで要素が取得できるのだが、WPFで作られたアプリはこれができない。
実は長らくこの問題に悩まされており、今まではマウス座標を指定するとか、なんかそういった方法でごまかしてきた。しかしながら、最近は流石にWPFとかUWP(こっちはもう死に体かもしれない)が増えてきて、そろそろモダンなアプリでも、要素を指定してクリックしたいなぁと思っていた。
こんな要望が無いのか、はたまた当たり前なのかはわからないが、ググってみてもこれと言った情報がない。一時期RPAツールがもてはやされたが、そういったツールが出来ている時点で、WPFを自動化する方法もあるはずなのだが。
Inspector
兎にも角にも、まずはSpy++のWPF版みたいなのを探さねばならない。これは
C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\inspect.exe
を使えば良い(10.0.19041.0はビルド番号)。時々挙動が怪しいが、まあとりあえず使える。
C#での自動化
色々と調べたところ、どうもUI Automationを使えば良さそうだ。これならレガシーなOSでもそれなりに動きそうなので安心。
結論
Inspectorで調べて、UI Automationでよろしくやれば色々と捗りそうだ。多分これからも自動化プログラムを作る機会は増えると思うので、今度ためしてみる。