Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何访问其他应用程序的JDialog中的字段?_Java_Swing_Winapi_Java Native Interface_Awt - Fatal编程技术网

Java 如何访问其他应用程序的JDialog中的字段?

Java 如何访问其他应用程序的JDialog中的字段?,java,swing,winapi,java-native-interface,awt,Java,Swing,Winapi,Java Native Interface,Awt,我需要在另一个Java应用程序的JDialog中填写一些字段。我无法访问它的源代码。我以前使用WinAPI为常规Windows应用程序做过这项工作。然而,这是我瞄准的Java应用程序。到目前为止,我已经能够使用JNI+winapi/findWindows获得窗口句柄 是否可以编写一个Java程序,从winapi窗口句柄(hwnd)实例化JDialog 比如: HWND hwnd = User32.INSTANCE.FindWindow("WindowClass", "WindowTitle");

我需要在另一个Java应用程序的JDialog中填写一些字段。我无法访问它的源代码。我以前使用WinAPI为常规Windows应用程序做过这项工作。然而,这是我瞄准的Java应用程序。到目前为止,我已经能够使用JNI+winapi/findWindows获得窗口句柄

是否可以编写一个Java程序,从winapi窗口句柄(hwnd)实例化JDialog

比如:

HWND hwnd = User32.INSTANCE.FindWindow("WindowClass", "WindowTitle");
JDialog externalDialog = new JDialog.fromHWND(hwnd);

您将发现这非常困难,因为Swing组件没有单独的窗口句柄,它们被渲染为父窗口组件的一部分。我不知道有什么方法可以在JVM之外实现这一点。如果对话框与同一JVM在一起,您应该能够使用递归算法检查容器上的组件Swing是否将其控件公开给MSAA或UI自动化(开放性问题)?如果是这样的话,您可以使用其中一种(最好是后者)。事实上,如果目标程序是Swing程序,我想知道您是否可以直接获取AccessibleContext…@andlabs非常有趣的建议。我有一些旧的C代码,用来测试我是否可以通过IAccessible访问这些字段。我可以得到一些子项(标题栏、滚动条、窗口本身等),但不能得到文本字段。您可以使用该工具验证GUI是否暴露于UI自动化/MSAA。我可以使用Inspect确认,实际上,只有少数控件通过IAccessible暴露。我要编辑的字段不是。