代码之家  ›  专栏  ›  技术社区  ›  Austyn Mahoney Janak

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

  •  1
  • Austyn Mahoney Janak  · 技术社区  · 15 年前

    我有一个Java应用程序,它将运行在Windows 7(使用Swing,App Sype 1),运行为全屏(但不在独占模式)。我有另一个应用程序(app 2),它显示一个GUI,通过一个串行端口配置一个外部设备,我没有这个串行端口的源,并且根本无法更改。

    我想在AppSype 1中嵌入Appyx 2,使它看起来像是父Java应用程序的一部分(隐藏文件--& GT;退出按钮并隐藏最小化、最大化和关闭按钮)。

    如果这种集成在Java应用程序内部是不可能的,那么我会很好的使用Java打开进程,并且仅仅监视它来保持它的开放性。它需要将窗口设置为“始终在顶部”,因为app 1是全屏的,并且尽可能隐藏外部MS Windows UI,以欺骗用户认为它不是外部应用程序。是否有一些方法使用JNI或其他方法来管理另一个进程窗口(屏幕位置、标题栏、最小化、最大化、关闭按钮可见度)和从Java应用程序内部的进程状态吗?

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

    1 回复  |  直到 15 年前
        1
  •  5
  •   Michael Spector    15 年前

    下面的方案是独立于语言的,我已经设法将IE窗口以这种方式嵌入到Ruby应用程序中:

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

      style=getwindowlongptr(app_hwnd,gwl_style);

      style=ws_子级;

      样式&=~ws_caption;

      style&=~ws_弹出窗口;

      setwindowlongptr(hwnd,gwl_样式,样式);

    • 定义窗口之间的父子关系:

      设置父级(app_hwnd,java_hwnd);

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