適材適所

システム屋のくらげが書いているブログです。PowerShellやVBAなどプログラミング系の話やシステム管理の気づきなどを書いています。

MENU

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

あー、仕事したくねぇ・・・。

そんなときはパソコンに働いてもらいましょう。

PowerShellを使えば、パソコンに仕事をしてもらえるかも知れません。

例えば、ウィンドウをクリックしたり、

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

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に仕事させるために勉強しているからサボれない?

あー早くなんでもやってくれる便利ロボットが登場してほしいですね。

それまでは、日々勉強です。

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