なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

PowerShellで電卓を自動操作~UIautomation~

Powershellかわいいかも!!!


たぶんアレな書き方してるような気がするんですが。

なんかこう、VBSみたい!!!←



コマンドプロンプト絶対に覚えたくなかったので

いろいろちょうどいいです。


さてさて、いろいろ試してみる予定です。

課題プログラムということで電卓操作です。



ぐぐっても知りたいソースがひっかからなかったので

自分でかくはめに。。。



拡張子が「.ps1」ファイルを作ってソースをコピペ。

#.ps1ファイルと同じフォルダにUiautomationフォルダを作ってdll格納してね!
$path = Split-Path -parent $MyInvocation.MyCommand.Path
$path = $path + "\UIAutomation\UIAutomation.dll"

Import-Module $path

#赤枠非表示にしたいときはfalse
[UIAutomation.Preferences]::Highlight = $true

try{
    $win = Get-UiaWindow -Name '電卓' 
}catch{
    echo "電卓開いてない"
    calc
    $win = Get-UiaWindow -Name '電卓' 
}


#クリアしとく
$Clearbtn = $win |Get-UiaButton -Name 'クリア'
$clearbtn.invoke() |Out-Null

$addBtn = $win |Get-UiaButton -Name 'プラス'


for($i=1;$i -lt 10;$i++){
    
    $btn = $win | Get-UiaButton -name $i

    $btn.Invoke() |Out-Null

    $addBtn.invoke() |Out-Null

    sleep -m 70

}


$disp = $win |Get-Uiatext -AutomationId 'CalculatorResults'
#なぜか下記だと取得できない!
#$dispane = $disp |Get-UiaPane -AutomationId 'textContainer' -Class 'ScrollViewer'

$output = $disp|Get-UiaControlFirstChild|Get-UiaControlFirstChild|Get-UiaTextRangeText
echo $output.replace(",","")


Powershellを実行するためのセキュリティポリシー

UIautomationのモジュール読み込みはほかでぐぐってね



使い方はともかくTry Catchつかえるんですなー。

JAVAで習ったのをちょっとだけおぼえてます。



実はなにがしんどかったって、計算結果の表示でした。

正確には今でもよくわかってません。



#なぜか下記だと取得できない!
#$dispane = $disp |Get-UiaPane -AutomationId 'textContainer' -Class 'ScrollViewer'

$output = $disp|Get-UiaControlFirstChild|Get-UiaControlFirstChild|Get-UiaTextRangeText

ここの部分ですね。

なぜかコメアウトしてるほうじゃエラーでるんですよ!!

しょうがないので、子要素ひっぱる形に。


とりあえず動いたのでよし!


ループの練習がてら1~9までを足す仕様。

見ての通り二けた以上に非対応



そのへん含めてここからいろいろ作っていきます!