Внедрить внешнее приложение в Java-приложение (или подделать его) - PullRequest
1 голос
/ 22 июля 2010

У меня есть Java-приложение, которое будет работать в Windows 7 (используя Swing, приложение № 1), которое работает в полноэкранном режиме (но не в эксклюзивном режиме). У меня есть другое приложение (приложение № 2), которое отображает графический интерфейс для настройки внешнего устройства через последовательный порт, к которому у меня нет источника, и я не могу его изменить вообще.

Я хочу встроить приложение № 2 в приложение № 1, чтобы оно выглядело как часть родительского Java-приложения (скрытие файла -> кнопка выхода и скрытие кнопок свертывания, разворачивания и закрытия).

Если такого рода интеграция невозможна внутри Java-приложения, я бы хорошо открыл процесс с помощью Java и просто отслеживал его, чтобы он оставался открытым. Было бы необходимо установить для окна значение «всегда сверху», потому что приложение №1 полноэкранное и скрывает как можно большую часть внешнего интерфейса MS Windows, чтобы заставить пользователя думать, что это не внешнее приложение. Есть ли какой-нибудь метод, использующий JNI или что-то еще для управления другим окном процессов (расположение экрана, строка заголовка, сворачивание, максимизация, закрытие видимости кнопок) и состояние процесса изнутри моего Java-приложения?

Я буду рад предоставить дополнительную информацию, если это необходимо.

1 Ответ

5 голосов
/ 22 июля 2010

Следующая схема не зависит от языка, мне удалось встроить окно IE в приложение Ruby следующим образом:

  • Прежде всего, измените стиль окна внешнего приложения (вы можете использовать JNA для вызова WinAPI):

    style = GetWindowLongPtr (APP_HWND, GWL_STYLE);

    style | = WS_CHILD;

    style & = ~ WS_CAPTION;

    style & = ~ WS_POPUP;

    SetWindowLongPtr (HWND, GWL_STYLE, стиль);

  • Определить родительско-дочерние отношения между окнами:

    SetParent (APP_HWND, JAVA_HWND);

  • Прослушайте события Move / Resize вашего окна Java и примените новые позиции к дочернему окну.

...