マネージ C++ で UI オートメーションを使用してControlType.DataItem
、コントロールの子を見つけようとしています。DataGrid
次のスニペットは、既知のHWND
値に対してC# から機能します。
var automationElement = AutomationElement.FromHandle(new IntPtr(0x000602AE));
var propertyCondition = new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.DataItem);
var dataItems = automationElement.FindAll(TreeScope.Subtree, propertyCondition).Count;
Console.WriteLine("Found {0} DataItem(s)", dataItems);
これにより、次の出力が得られます。
Found 2 DataItem(s)
コードを MC++ に変換すると、結果はゼロになります。変換された MC++ コードは次のとおりです。
auto automationElement = AutomationElement::FromHandle(IntPtr(0x000602AE));
auto propertyCondition = gcnew PropertyCondition(AutomationElement::ControlTypeProperty, ControlType::DataItem);
auto dataItems = automationElement->FindAll(TreeScope::Subtree, propertyCondition)->Count;
Console::WriteLine("Found {0} DataItem(s)", dataItems);
マネージド C++ から UI オートメーションを使用してこの問題に遭遇した人はいますか? 私は過去に UIA に MC++ を使用したことがあり、これが C# からの使用との最初の違いです。情報をお寄せいただきありがとうございます。