.NET 以编程方式定位 ActiveX 控件中的文本框,修改其文本并提交

发布于 2024-09-16 03:32:21 字数 973 浏览 11 评论 0原文

我有一个带有工具栏的 ActiveX 控件(Adobe PDF Reader)。该控件不公开通过工具栏可用的某些功能(主要是搜索功能)。我正在寻找一种方法以编程方式找到工具栏上的“搜索”字段,输入文本并调用搜索(相当于在此字段中按 Enter 键)。 最准确的方法是什么?找到了基于 System.Windows.Automation 命名空间的解决方案,但无法使其正常工作。

谢谢。

这是我尝试过的代码:

Dim pdfElement As AutomationElement = AutomationElement.FromHandle(AxAcroPDF1.Handle)
Dim condition As New AndCondition(New OrCondition(New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit), New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Document), New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Text)), New PropertyCondition(AutomationElement.IsTextPatternAvailableProperty, True))
Dim ac As AutomationElementCollection = pdfElement.FindAll(TreeScope.Descendants, condition)

For Each element As AutomationElement In ac

    If element.Current.Name = "Find" Then
        element.SetFocus()
        SendKeys.Send("TESTSEARCH")
    End If

Next

I have an ActiveX control (Adobe PDF Reader) with a toolbar. This control doesn't expose some functions available through toolbar (mainly search function). I'm looking for a way to programmatically locate Search field on the toolbar, enter the text and invoke search (equivalent of pressing Enter in this field).
What's most accurate way to make that? Found a solution based on System.Windows.Automation namespace, but couldn't get it to work correctly.

Thanks.

Here's the code I tried:

Dim pdfElement As AutomationElement = AutomationElement.FromHandle(AxAcroPDF1.Handle)
Dim condition As New AndCondition(New OrCondition(New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit), New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Document), New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Text)), New PropertyCondition(AutomationElement.IsTextPatternAvailableProperty, True))
Dim ac As AutomationElementCollection = pdfElement.FindAll(TreeScope.Descendants, condition)

For Each element As AutomationElement In ac

    If element.Current.Name = "Find" Then
        element.SetFocus()
        SendKeys.Send("TESTSEARCH")
    End If

Next

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月竹挽风 2024-09-23 03:32:21

与您上一个问题的答案相同。零售自动化接口具有 FindText() 方法。我已经为您提供了 API 文档的链接。

Same answer as you previous question. The retail automation interface has the FindText() method. I already gave you the link to the API documentation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文