在Java应用程序中嵌入外部应用程序(或伪造它)

时间:2010-07-22 09:13:04

标签: java java-native-interface external-process

我有一个可以在Windows 7(使用Swing,App#1)上运行的java应用程序,它运行为全屏(但不是独占模式)。我有另一个应用程序(App#2),它显示一个GUI,通过串口配置外部设备,我没有源,也根本无法更改。

我想在App#1中嵌入App#2,使其看起来像是父java应用程序的一部分(隐藏文件 - >退出按钮并隐藏最小化,最大化和关闭按钮)。

如果在Java应用程序中无法进行这种集成,那么我可以使用Java打开进程并只监视它以保持打开状态。它需要将窗口设置为“始终在顶部”,因为App#1是全屏的并且尽可能多地隐藏外部MS Windows UI以诱使用户认为它不是外部应用程序。是否使用JNI或其他方法管理另一个进程窗口(屏幕位置,标题栏,最小化,最大化,关闭按钮可见性)和来自Java应用程序内部的进程状态的某种方法?

如果需要,我很乐意提供更多信息。

1 个答案:

答案 0 :(得分:5)

以下方案与语言无关,我设法以这种方式将IE窗口嵌入到Ruby应用程序中:

  • 首先,更改外部应用程序窗口的样式(可以使用JNA调用WinAPI):

    style = GetWindowLongPtr(APP_HWND,GWL_STYLE);

    style | = WS_CHILD;

    style& = ~WS_CAPTION;

    style& = ~WS_POPUP;

    SetWindowLongPtr(HWND,GWL_STYLE,style);

  • 定义windows之间的父子关系:

    SetParent(APP_HWND,JAVA_HWND);

  • 收听Java窗口的移动/调整大小事件,并在子窗口中应用新位置。