[C#]AutomationElementを使ってラベルの背景色を取得する方法は有りますか?
解決したいこと
C#でUIオートメーションを使ったコードを記述中です。
他のWinidowフォーム上に配置されたラベルの背景色で現在のステータスを表している箇所が有り、そのステータスを知るためにラベルの背景色を取得したいので色々と頑張っているのですがその方法が見つかりません。
やりたいことは、ラベルの背景色を取得し、色によってif文若しくはswitch分などを使用して処理A,処理Bの様に分岐させて動作を変えると言う物です。
ラベルのクラスはC#で作られているフォームなのでSpy++で見ると
WindowsForms10.STATIC.app.0.141b42a_r14_ad1
となっています。
このクラスの情報取得は結構難しくて、テキストの取得もValuePatternとかからは取得できず
AutomationElement.Current.Name
でしか取得できなかったのですが、背景色に関しては該当するプロパティもわからず、取得方法が見つかっていません。
尚、TextBoxの場合は、以下のコードで問題無く背景色を取得できている様です。
TextBoxの背景色を取得する場合
// 呼び出し側
Int32? textCollor = MainWindow.GetControlBackCollor(TargrtElement);
if (textCollor != null)
{
textBox2.Text = ((Int32)textCollor).ToString("X8");
if(textCollor == 0xFFFFFF)
{
// 処理A
}
else
{
// 処理B
}
}
public Int32? GetControlBackCollor(AutomationElement targetElement)
{
if (targetElement == null) return null;
object patternObj;
if (targetElement.TryGetCurrentPattern(TextPattern.Pattern, out patternObj))
// 上記はTextだがラベルでは使えない。ValuPatternも認識しない。
{
var textPattern = (TextPattern)patternObj;
Int32 oAttribute = (Int32)(textPattern.DocumentRange.GetAttributeValue(TextPattern.BackgroundColorAttribute));
// ここに記述するはずのラベルのプロパティが書けない。
return oAttribute;
}
else
{
return null;
}
}
同じようにラベルコントロールに関しても背景色を取得したいので該当するPattern等やAutomationElementのプロパティなど探したのですが
確認出来ず、実現できていません。
そもそもAutomationEementからの背景色取得は出来ないものなのでしょうか?
又はこれに変わる良い方法は有りますでしょうか?
ラベルのプロパティ取得は中々難しく、ご存じの方がいましたらご教授の程よろしくお願いします。