Incorpora un'applicazione esterna all'interno dell'applicazione Java (o falsificala)
-
26-09-2020 - |
Domanda
Ho un'applicazione Java che verrà eseguita su Windows 7 (utilizzando Swing, App n. 1) che funziona a schermo intero (ma non in modalità esclusiva).Ho un'altra applicazione (App n. 2) che visualizza una GUI per configurare un dispositivo esterno su una porta seriale di cui non ho l'origine e che non posso modificare affatto.
Voglio incorporare l'app n. 2 all'interno dell'app n. 1 in modo che sembri parte dell'applicazione Java principale (nascondendo il file --> pulsante di uscita e nascondendo i pulsanti di riduzione a icona, ingrandimento e chiusura).
Se questo tipo di integrazione non è possibile all'interno dell'applicazione Java, mi andrebbe bene aprire il processo utilizzando Java e monitorarlo semplicemente per mantenerlo aperto.Sarebbe necessario mantenere la finestra impostata su "sempre in primo piano" perché l'App n. 1 è a schermo intero e nascondere la maggior parte possibile dell'interfaccia utente esterna di MS Windows per indurre l'utente a pensare che non sia un'applicazione esterna.Esiste un qualche tipo di metodo se si utilizza JNI o qualcos'altro per gestire un'altra finestra di processi (posizione dello schermo, barra del titolo, minimizzare, ingrandire, chiudere la visibilità del pulsante) e lo stato del processo dall'interno della mia applicazione Java?
Sarò felice di fornire maggiori informazioni se necessario.
Soluzione
Il seguente schema è indipendente dalla lingua, sono riuscito a incorporare la finestra IE in un'applicazione Ruby in questo modo:
Prima di tutto, cambia lo stile della finestra dell'applicazione esterna (puoi usare JNA per chiamare WinAPI):
stile = GetWindowLongPtr(APP_HWND, GWL_STYLE);
stile |= WS_CHILD;
stile &= ~WS_CAPTION;
stile &= ~WS_POPUP;
SetWindowLongPtr(HWND, GWL_STYLE, stile);
Definire la relazione genitore-figlio tra le finestre:
ImpostaParent(APP_HWND, JAVA_HWND);
Ascolta gli eventi di spostamento/ridimensionamento della tua finestra Java e applica nuove posizioni su una finestra secondaria.