UIAutomationでCheckboxとRadioButton

WinActorで無理やりUIAutomation制御する企画。

今日は、チェックボックスとラジオボタンの操作にチャレンジ。

 

1.CheckBoxコントロール

最初、普通にClick操作でInvokeしたらいいんじゃね?って思ったんだけども、結局それだとTrue/False状態を任意に制御できない。

チェック状況を取得しようとすると、ちゃんとAutomationElementからTogglePatternとして取得して操作しないといけないみたいですね。

ちなみに、取得されるステータスはON/OFF以外にIndeterminateというステータスが返ってくるみたいなので値のチェックにも注意が必要です。

取得するコードはこんな感じ

対して、設定するコードはこんな感じ

ToggleStateがIndeterminateで返る可能性があるので、Onかどうかで判定してToggleする感じで考えてみた。

DefaltがTrueのチェックボックスで取得結果がIndeterminateだけどもチェック入ってる状況っていうコントロールがもしあれば、操作が失敗することになる。

 

2.RadioButtonコントロール

内部的には、SelectionItemPatternになってるみたい。

ListViewの時は、SelectionPatternが親でSelectionItemPatternが子になっているツリー構造だったんだけどもUI的にきちんとフレームとかでグルーピングされていないRadioButtonはどのボタン同士がグルーピングされているのか判別できる項目が見当たらなくて、ただSelectionItemPatternが並んでるだけに見える。

てことは、プロパティ値としてはListViewの中で選択されている項目とRadioButtonの選択項目は同じ様にIsSelectedプロパティ見るだけで判定/設定できるってことですね。

前回のListView項目選択のコードを拡張する形で考えるとこうかな。

IsSelectionPatternAvailableがTrueだったら、子要素のIsSelectionItemPatternをSelectするし、IsSelectionItemPatternAvailableがTrueだったらそのままSelectするみたいな感じ。

これで、ComboBox・ListView・RadioButtonは共通的に項目選択ができるハズ。

 

3.本日の成果物

アップロード資材はこちら。

1.UIA_cmd.exeをWinActor.exeと同じフォルダに配置。

2.「スクリプト実行ノード張り付け用.txt」をスクリプト実行ノードに張り付け。

 

今回の更新で、操作の内容にGetToggle,SetToggleと、GetSelectionItemIsSelected,SetSelectionItemValueが追加されました。

今度は、このUIAutomationをVBSめーかーからキックできる様にしてみよう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です