Microsoft UI オートメーションの使用。「ウィンドウ」や「ボタン」など、UIA コントロールの種類を表す文字列があります。この文字列に適合する ControlType オブジェクトを取得したいと思います。どうやってするの?すべての UIA コントロール タイプを表すいくつかの列挙が存在しますか? ControlType に ControlType.LookupById(int) メソッドがあることだけがわかりました。しかし、IDと名前の対応を知らなければなりません。もちろん、考えられるすべての UIA コントロール タイプを使用して独自のスイッチを作成することも、リフレクションを使用して ControlType ファクトリのすべてのメンバーを取得することもできます。しかし、私は確かに簡単な方法であるべきです..
1935 次
1 に答える
3
私にとって非常に奇妙なPresentationCore.dllを使用して、そのような列挙型が標準のUIA DLLに存在しないことを発見しました。また、ControlType クラスにバグがあることに注意してください。これは、プライベートな静的コンストラクターが原因であると思われます。ControlType.LookupById(enumId) を1回目に呼び出すとnullが返ってきますが、2回目はOKです。解決策は非常に簡単です-使用する前に ToString を呼び出すだけで、静的コンストラクターが初期化されます:)
using System.Windows.Automation.Peers;
// solving the bug with static constructor of ControlType..
ControlType.Button.ToString();
string controlTypeString = "Window";
AutomationControlType typeEnum;
bool result = Enum.TryParse(controlTypeString, true, out typeEnum);
if (result) typeEnum = (AutomationControlType)Enum.Parse(typeof(AutomationControlType), controlTypeString);
int enumId = (int)typeEnum + 50000;
ControlType controlType = ControlType.LookupById(enumId);
于 2012-12-20T11:27:24.323 に答える