在Java应用程序中嵌入外部应用程序(或伪造)
我有一个java应用程序将在Windows7上运行(使用Swing,App#1),它可以全屏运行(但不是独占模式)。我有另一个应用程序(App#2),它显示一个GUI,通过一个串行端口配置一个外部设备,我没有源代码,也无法更改 我想将App#2嵌入App#1中,使其看起来像是父java应用程序的一部分(隐藏文件-->退出按钮,隐藏最小化、最大化和关闭按钮) 如果这种集成在Java应用程序中是不可能的,我可以使用Java打开流程,并监视它以保持其开放性。它需要将窗口设置为“始终在顶部”,因为App#1是全屏的,并且尽可能多地隐藏外部MS Windows UI,以诱使用户认为它不是外部应用程序。是否有某种方法可以使用JNI或其他方法从Java应用程序内部管理另一个进程窗口(屏幕位置、标题栏、最小化、最大化、关闭按钮可见性)和进程状态在Java应用程序中嵌入外部应用程序(或伪造),java,java-native-interface,external-process,Java,Java Native Interface,External Process,我有一个java应用程序将在Windows7上运行(使用Swing,App#1),它可以全屏运行(但不是独占模式)。我有另一个应用程序(App#2),它显示一个GUI,通过一个串行端口配置一个外部设备,我没有源代码,也无法更改 我想将App#2嵌入App#1中,使其看起来像是父java应用程序的一部分(隐藏文件-->退出按钮,隐藏最小化、最大化和关闭按钮) 如果这种集成在Java应用程序中是不可能的,我可以使用Java打开流程,并监视它以保持其开放性。它需要将窗口设置为“始终在顶部”,因为App
如果需要的话,我很乐意提供更多信息。以下方案与语言无关,我已通过这种方式将IE窗口嵌入到Ruby应用程序中:
- 首先,更改外部应用程序窗口的样式(可以使用JNA调用WinAPI): 样式=GetWindowLongPtr(应用程序样式,GWL样式) 样式|=WS|U儿童 样式&=~WS\u标题 样式&=~WS\u弹出窗口 SetWindowLongPtr(HWND、GWL_样式、样式)
- 定义窗口之间的父子关系: SetParent(应用程序、JAVA应用程序)
- 收听Java窗口的移动/调整大小事件,并在子窗口上应用新位置
EnumWindows
,该方法返回所有现有窗口。然后通过窗口标题(GetWindowText
method)@spektom找到相关的一个。您有上面描述的Java应用程序的源代码吗?我正在尝试使用Java小程序在网页中嵌入桌面应用程序窗口。@spektom还有,不使用Windows API(不是跨平台的)也可以做到这一点吗?@AndersonGreen如果您是为跨平台开发,您必须单独实现所有特定于平台的部分,即GTK、Windows、,等等。我没有Java的源代码,但如果您查看Eclipse源代码中的浏览器嵌入部分,您将找到如何做到这一点所需的所有信息: