Внедрить внешнее приложение в Java-приложение (или подделать его)
У меня есть Java-приложение, которое будет работать в Windows 7 (используя Swing, приложение № 1), которое работает в полноэкранном режиме (но не в эксклюзивном режиме). У меня есть другое приложение (приложение № 2), которое отображает графический интерфейс для настройки внешнего устройства через последовательный порт, к которому у меня нет источника, и я не могу его изменить вообще.
Я хочу встроить приложение № 2 в приложение № 1, чтобы оно выглядело как часть родительского Java-приложения (скрытие кнопки "Файл" -> "Выход" и скрытие кнопок "Свернуть", "Развернуть" и "Закрыть").
Если такого рода интеграция невозможна внутри Java-приложения, я мог бы открыть процесс, используя Java, и просто отслеживать его, чтобы он оставался открытым. Было бы необходимо держать окно "всегда сверху", потому что приложение № 1 полноэкранное и скрывает как можно большую часть внешнего интерфейса MS Windows, чтобы заставить пользователя думать, что это не внешнее приложение. Есть ли какой-нибудь метод, использующий JNI или что-то еще для управления другим окном процессов (расположение экрана, строка заголовка, сворачивание, увеличение, видимость кнопки закрытия) и состояние процесса изнутри моего Java-приложения?
Я буду рад предоставить больше информации, если это необходимо.
1 ответ
Следующая схема не зависит от языка, мне удалось встроить окно IE в приложение Ruby следующим образом:
Прежде всего, измените стиль окна внешнего приложения (вы можете использовать JNA для вызова WinAPI):
style = GetWindowLongPtr (APP_HWND, GWL_STYLE);
стиль |= WS_CHILD;
стиль &= ~WS_CAPTION;
стиль & = ~ WS_POPUP;
SetWindowLongPtr (HWND, GWL_STYLE, style);
Определите родительско-дочерние отношения между окнами:
SetParent (APP_HWND, JAVA_HWND);
Прослушайте события Move/Resize вашего окна Java и примените новые позиции к дочернему окну.