~UI Automationで画面操作捕捉!その1~ UI Automation with PowerShell 奮戦記 4日目
UI Automation*1で遊ぼう!
UI Automation の画面操作の捕捉機能を使用した画面ハードコピーの自動化に挑戦しています。Windowsの標準実装のみ、PowerShellのみで動作させることを目指しています。
UI Automationというと
「画面の操作が出来る」
が最初に浮かんでくると思いますが
画面の操作のイベントを取得することも出来ます。
自動画面ハードコピーも作れますね。
PowerShellでUI Automationのイベント取得が出来るか
確認していきたいと思います。
まずPowerShellで可能な以下のイベント取得を確認してみます。
- Windows Formでのイベント取得(ボタンクリック)
- Register-ObjectEventでのイベント取得(タイマー)
Windows Formでのイベント取得(ボタンクリック)
PowerShell Version2(管理者権限)で実行してみる。
# Windows Form を組み込む Add-Type -AssemblyName System.Windows.Forms # コントロール作成 $form = New-Object System.Windows.Forms.Form $button = New-Object System.Windows.Forms.Button $button.Text = "click !!" $form.Controls.Add($button) # ボタンクリックイベント $button.Add_Click({Write-Host "click !!"}) # フォーム表示 $form.ShowDialog()
実行結果
Register-ObjectEventでのイベント取得(タイマー)
PowerShell Version2(管理者権限)で実行してみる。
# タイマーを組み込む $timer = New-Object System.Timers.Timer # タイマー間隔 $timer.Interval = 2000 # タイマーイベント Register-ObjectEvent -InputObject $timer -EventName Elapsed -Action {Write-Host "timer !!"} | Out-Null # タイマースタート $timer.Enabled = $true
実行結果
timer !! timer !! timer !! timer !! timer !!
これらWindows Forms,TimerはオブジェクトにEventタイプがある為、PowerShellよりイベントを取得出来ます。
Name MemberType Definition Click Event System.EventHandler Click(System.Object, System.EventArgs)
Name MemberType Definition Elapsed Event System.Timers.ElapsedEventHandler Elapsed(System.Object, System.Timers.ElapsedEventArgs)
UI Automationはどうでしょう。
Name MemberType Definition AddAutomationEventHandler Method static void AddAutomationEventHandler(System.Windows.Automati... AddAutomationFocusChangedEventHandler Method static void AddAutomationFocusChangedEventHandler(System.Wind... AddAutomationPropertyChangedEventHandler Method static void AddAutomationPropertyChangedEventHandler(System.W... AddStructureChangedEventHandler Method static void AddStructureChangedEventHandler(System.Windows.Au...
メソッドで公開しています。
EventタイプでPowerShellに公開する為、Net Frameworkで実装するしかなさそうです。