適材適所

PowerShellを中心にプログラミングやシステム管理の備忘録的なブログ

【PowerShell】System.Windows.Automationでウィンドウを最小化・最大化する簡単なサンプル

例えば、ウィンドウをクリックしたり、ウィンドウに表示されている文字列を取得して、処理を分岐させたり・・・。

System.Windows.Automation(以下 UIAutomationと言う)を使うと、PowerShellによるRPA的なことが簡単にできます。

うまく使いこなせば、本格的なRPAもできます。

この記事ではUIAutomationを使ったウィンドウのサイズを最小化したり最大化したりする簡単なサンプルを紹介したいと思います。

検証した環境

Windows10
PowerShell5.1

UIAutomationを使ったウィンドウの最小化・最大化のサンプル

メモ帳のウィンドウサイズを最大/最小化を切り替えるサンプルです。

ここではメモ帳を対象にしていますが、コード内の「".メモ帳"」の部分を好みのウィンドウキャプションに変更することで好きなウィンドウの最大/最小を切り替えることができます。

 
#操作したいウィンドウのタイトル
$MAIN_WINDOW_TITLE="*メモ帳*"
Add-Type -AssemblyName UIAutomationClient
#Get-Processで取得できた1つ目のハンドルを対象とする。
$hwnd=(Get-Process |?{$_.MainWindowTitle -like $MAIN_WINDOW_TITLE})[0].MainWindowHandle
#ハンドルからウィンドウを取得する
$window=[System.Windows.Automation.AutomationElement]::FromHandle($hwnd)
$windowPattern=$window.GetCurrentPattern([System.Windows.Automation.WindowPattern]::Pattern)
#ウィンドウサイズが最大なら最小化し、最小なら最大化する
if ($windowPattern.Current.WindowVisualState -eq [System.Windows.Automation.WindowVisualState]::Maximized)
{
   $windowPattern.SetWindowVisualState([System.Windows.Automation.WindowVisualState]::Minimized)    
}
else
{
   $windowPattern.SetWindowVisualState([System.Windows.Automation.WindowVisualState]::Maximized)
}

UIAutomationのドキュメント

UIAutomationすごい!!もっと知りたい!!という方は、何はなくともMicrosoftの公式ドキュメントにあたってみるのが一番かと思います。

https://docs.microsoft.com/ja-jp/dotnet/framework/ui-automation/ui-automation-overview

とはいっても公式ドキュメントにあたるときはくれぐれも心を折られないようご注意ください。

私は10回くらいバッキバキに折られました。

折られた心が回復したら、もう少し詳しい解説を書きたいと思っています。

終わりに

UIAutomationを使ったごくごく簡単なサンプルの紹介でした。

これまではWindows APIを呼び出さなくてはいけなかった場面でもSystem.Windows.Automationを呼び出すことで実現できるようになっているような気がします。

この機能を使いこなせれば単調な仕事はパソコンに任せて有意義な時間を過ごすことができることこの上なしです。

え?

公式ドキュメントを読んで理解してプログラムを作るより、自分でやっちゃった方が早い?

それに結局PCに仕事させるために勉強しているから同じ?

RPAをやろうとしても結局学習コストがかかる、ということでしょうかね。

というわけで、ここまでお読みいただき、ありがとうございました。