【问题标题】:Click on button using UI Automation in Winform application in VC++在 VC++ 的 Winform 应用程序中单击使用 UI 自动化的按钮
【发布时间】:2012-06-28 21:17:42
【问题描述】:

我想使用 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 ^'

谁能帮我解决这些错误。

谢谢。

【问题讨论】:

    标签: winforms visual-studio-2010 visual-c++ ui-automation


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您不能使用这些对象进行投射。这是在 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

      【讨论】:

        猜你喜欢
        • 2016-04-23
        • 2014-04-28
        • 1970-01-01
        • 1970-01-01
        • 2020-04-22
        • 1970-01-01
        • 2019-01-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多