Incorporar aplicativo externo dentro do aplicativo Java (ou falso)
-
26-09-2020 - |
Pergunta
Eu tenho um aplicativo Java que será executado no Windows 7 (usando Swing, App # 1) que é executado como tela cheia (mas não no modo exclusivo). Eu tenho outro aplicativo (aplicativo # 2) que exibe uma GUI para configurar um dispositivo externo em uma porta serial que eu não tenho a fonte e não posso alterar.
Eu quero incorporar o aplicativo # 2 dentro do aplicativo # 1 para que pareça que é parte do aplicativo pai Java (escondendo o botão Arquivo -> Sair e escondendo os botões Minimizar, Maximizar e Fechar). < / p >.
Se esse tipo de integração não for possível dentro do aplicativo Java, eu ficaria bem em abrir o processo usando Java e apenas monitorá-lo para mantê-lo aberto. Ele precisaria manter a janela definida para "sempre no topo" porque o App # 1 é em tela cheia e esconda o máximo possível da UI do MS externo possível para enganar o usuário em pensar que não é um aplicativo externo. Existe algum tipo de método se usa o JNI ou outra coisa para gerenciar outra janela de processos (localização da tela, barra de título, minimizar, maximizar, fechar a visibilidade do botão) e o estado de processo de dentro do meu aplicativo Java?
Terei todo o prazer em fornecer mais informações, se necessário.
Solução
O seguinte esquema é independente da linguagem, eu consegui incorporar a janela IE em um aplicativo Ruby desta forma:
-
Primeiro de tudo, altere o estilo da janela do aplicativo externo (você pode usar o JNA para chamar winapi):
style= getwindowlongptr (app_hwnd, gwl_style);
estilo |= ws_child;
style &= ~ ws_caption;
style &= ~ ws_popup;
setwindowlongptr (hwnd, gwl_style, estilo);
-
Defina a relação pai-filho entre o Windows:
setparent (app_hwnd, java_hwnd);
-
Ouça eventos de mover / redimensionar a janela Java e aplicar novas posições em uma janela de criança.