【问题标题】:Enumerating and reading UI controls of Java application from .NET application从 .NET 应用程序枚举和读取 Java 应用程序的 UI 控件
【发布时间】:2012-11-13 22:18:57
【问题描述】:

我有一个用 Java 编写的应用程序。该应用程序中有几个 UI 控件(文本框、网格、按钮等) 我需要开发 .NET 应用程序,它能够列出 UI 元素并从中读取文本数据。我在获取 Java 应用程序的窗口句柄时没有问题,但之后我就卡住了。

Java 应用程序是第三方的,不能以任何方式修改。 我在 Java 方面的经验为零,但在 C# 方面经验丰富。 我尝试使用 Java Access Bridge,但它似乎不起作用。据我了解,Java 应用程序需要支持 Java Accessibility API,而它可能不支持。

请分享您对类似任务的经验,或者只是为我指明正确的方向。

如何从 Java VM 外部枚举/读取 UI 控件?

【问题讨论】:

    标签: c# java .net interop


    【解决方案1】:

    我找到了解决方案。 我的 Java 应用程序似乎仍然支持 Java Access Bridge,但一开始我无法让它工作。

    提示:

    1. WinForms 应用程序需要使用 Java Access Bridge API,我试图从控制台 .NET 应用程序访问它。 (WPF应该也支持,但我没测试过)

    2. Windows_run 方法应该在 form 的构造函数中调用。就在您访问任何其他 API 函数之前。

    3. 应在文件 accessibility.properties(文件夹:C:\Program Files\Java\jre7\lib)中启用 Java Access Bridge

    【讨论】:

      【解决方案2】:

      您需要执行the code in this StackOverflow example 之类的操作来获取所有子窗口,然后使用WM_GETTEXT 读取文本数据。

      【讨论】:

      • 应用程序是 Java 的事实并不重要 - 它仍然在 Windows 上运行,并且需要调用 Windows API 来生成基本的 UI 元素,如文本框等。
      • 如果就这么简单... Java 正在 VM 中运行并自行绘制 UI 元素。我不认为它使用 Windows API 进行 UI 绘图(窗口标题和最小化/最大化/关闭按钮除外)。至少 UIA 验证工具什么都没有显示,除了上面提到的。
      【解决方案3】:

      唯一的方法是转换 .NET -> Java 或 Java -> .NET 是手动的,或者可能有一些商业转换器。您可以通过创建实例在 Java VM 中运行 Java 代码,但 Java 没有这样的互操作,它不是 COM。但是,this 可能很有用。

      【讨论】:

        猜你喜欢
        • 2010-09-21
        • 2010-12-09
        • 2011-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多