在Java应用程序内嵌入外部应用程序(或假装)
-
26-09-2020 - |
题
我有一个Java应用程序,它将在Windows 7上运行(使用Swing,App#1)作为全屏(但不是独占模式)。我有另一个应用程序(App#2),它显示GUI以通过串行端口配置外部设备,即我没有源代码,无法改变。
我想在app#1内嵌入应用程序#2,这样它看起来就像是父java应用程序的一部分(隐藏文件 - >退出按钮并隐藏最小化,最大化和关闭按钮)。< / p>
如果在Java应用程序中不可能进行这种集成,我将使用Java打开进程并仅监控它以保持打开状态。它需要将窗口设置为“始终在顶部”,因为App#1是全屏和隐藏的外部MS Windows UI,尽可能欺骗用户认为它不是外部应用程序。是否有某种方法是使用JNI或其他东西来管理另一个进程窗口(屏幕位置,标题栏,最小化,最大化,最大化,关闭按钮可见性)和处理状态,从我的Java应用程序中进行?
如果需要,我很乐意提供更多信息。
解决方案
以下方案是语言独立的,我已经设法将IE窗口嵌入到Ruby应用程序中:
-
首先,更改外部应用程序窗口的样式(您可以使用JNA来调用WinAPI):
style= getWindowlongptr(app_hwnd,gwl_style);
style |= ws_child;
样式&=〜ws_caption;
样式&=〜ws_popup;
setwindowlongptr(hwnd,gwl_style,style);
-
在Windows之间定义父子关系:
setparent(app_hwnd,java_hwnd);
-
侦听移动/调整Java窗口的大小事件,并在子窗口上应用新职位。
不隶属于 StackOverflow