1

我想单击使用 UI 自动化的按钮。我在 Winform VC++ 中使用 UI 自动化。

这是我的代码..

 AutomationElement^  Select_connect_button= aeForm->FindFirst(TreeScope::Children,gcnew PropertyCondition(AutomationElement::NameProperty, "Select/Connect"));
InvokePattern^ ipClickButton1 = (InvokePattern)Select_connect_button->GetCurrentPattern(InvokePattern::Pattern);
 ipClickButton1->Invoke();

但它显示这些错误:

error C2440: 'type cast' : cannot convert from 'System::Object ^' to 'System::Windows::Automation::InvokePattern'

error C2440: 'initializing' : cannot convert from 'System::Windows::Automation::InvokePattern' to 'System::Windows::Automation::InvokePattern ^'

谁能帮我解决这些错误。

谢谢。

4

2 回答 2

0

构建错误是您将 (InvokePattern) 转换为“InvokePattern^”。

在我的测试中,将第二行更新为以下代码将解决此问题:

InvokePattern^ ipClickButton1 = ( InvokePattern^ )Select_connect_button->GetCurrentPattern(InvokePattern::Pattern);

于 2012-07-15T04:08:52.350 回答
0

您不能使用这些对象进行投射。这是在 C# 中执行此操作的一种方法。您可以在此处获取方法名称等。您需要的各种常量类似于:

C:\Program Files\Microsoft SDKs\Windows\v7.0\Include\UIAutomationClient.h(可能是 v7.1 目录)

public static IUIAutomationInvokePattern elementToInvokePattern(this IUIAutomationElement element)
    {
        var conditionInvokePattern = auto.CreatePropertyCondition(
                                                        WindowsConstants.UIA_IsInvokePatternAvailablePropertyId,
                                                        true);

        var cacheRequest = auto.CreateCacheRequest();
        cacheRequest.AddPattern(WindowsConstants.UIA_InvokePatternId);

        var cachedElement = element.FindFirstBuildCache(TreeScope.TreeScope_Element,
                                            conditionInvokePattern,
                                            cacheRequest);

        var invokePattern = (IUIAutomationInvokePattern)
            cachedElement.GetCachedPattern(WindowsConstants.UIA_InvokePatternId);
        return invokePattern;
    }

看起来示例中的常量来自这里:http: //msdn.microsoft.com/en-us/library/dd757483.aspx

于 2012-07-21T21:26:18.743 回答