View Full Version : Applicazione java, c'è possibilità di interfacciamento api dall'esterno?
Domanda secca e precisa da parte di una persona che Java non lo mastica (scusate l'ignoranza...)
Per interfacciamento intendo qualcosa che mi permetta di fare la setfocus su un campo, leggere il contenuto di un altro, cliccare un pulsante o una checkbox e così via.
Una finestra nativamente windows reagisce alle api win32, ma una finestra java come me la smazzo?
Grazie! ;)
banryu79
15-07-2009, 16:01
Cioè devi programmare una applicazione Java con interfaccia grafica?
Allora puoi dare un'occhiata a questo ottimo tutorial (http://www.hwupgrade.it/forum/showthread.php?t=2005654), perfetto per chi comincia.
No, devo interfacciare qualcosa di già scritto in java, per questo cerco delle api che mi permettano di interagire con questo tipo di finestre.
banryu79
15-07-2009, 16:18
No, devo interfacciare qualcosa di già scritto in java, per questo cerco delle api che mi permettano di interagire con questo tipo di finestre.
Ah, interessante!
Allora non saprei. Non sono un esperto di API Win32 ma questo è possibile farlo nel contesto di un'applicazione Win32 perchè mi pare che con le API Win32 hai a disposizione metodi che ti permettono di ottenere il riferimento a qualunque finestra sia in esecuzione, anche da processi diversi da quello del chiamante.
Una volta ottenuto il riferimento alla finestra (il proverbiale HANDLE se non sbaglio) hai a disposizione funzioni che lo prendo come parametro di ingresso e sui agiscono.
Che io sappia non esiste nulla del genere per Java, almeno nei tools/librerie standard.
Forse si può fare con JNI. Ma temo che sia una bella gatta da pelare (cioè devi conoscere un fottio di cose).
Se è un'applicazione Swing non puoi farlo tramite le api del window manager. Per il window manager i componenti Swing non esistono.
Devi agganciarti all'applicazione. Se hai il controllo della JVM che esegue il programma - cioè se puoi lanciare il programma e quindi inserire un tuo "hook" java - la faccenda è semplicissima (Frame.getFframes() restituisce tutte le finestre aperte, una rapida ispezione del contenuto e puoi accedere a tutto quello che quella finestra contiene).
Se non hai il controllo della JVM allora devi passare per JNI ma interfacciandoti alla JVM in esecuzione. E questo potrebbe richiedere un po' di esperimenti perchè non c'è molta letteratura al riguardo.
Se è un'applicazione Swing non puoi farlo tramite le api del window manager. Per il window manager i componenti Swing non esistono.
Devi agganciarti all'applicazione. Se hai il controllo della JVM che esegue il programma - cioè se puoi lanciare il programma e quindi inserire un tuo "hook" java - la faccenda è semplicissima (Frame.getFframes() restituisce tutte le finestre aperte, una rapida ispezione del contenuto e puoi accedere a tutto quello che quella finestra contiene).
Se non hai il controllo della JVM allora devi passare per JNI ma interfacciandoti alla JVM in esecuzione. E questo potrebbe richiedere un po' di esperimenti perchè non c'è molta letteratura al riguardo.
Vi ringrazio entrambi e provo a entrare un attimo di più nel dettaglio:
verissimo che una finestra java per win32 è solo una scatola nera, infatti riesco a capire solo la title con getwindowtext.
Cosa intendi allora per "avere il controllo della JVM"?
Quando mi parli di
inserire un tuo "hook" java - la faccenda è semplicissima Frame.getFframes()
immagino intendi comunque scrivere altro codice Java che parla con la finestra target...o sbaglio?
Si tratta di creare un programma Java che lancia l'altro programma Java. Dopo averlo lanciato invoca Frame.getFrames() e ottiene tutti le finestre AWT/Swing aperte in quella JVM.
Lanciare un programma Java da un'altro programma Java è questione di poche righe perchè ogni programma Java ha un punto d'entrata che è un comune metodo statico e quindi può essere tranquillamento invocato come tale da un'altra classe.
E' però necessario mandare in esecuzione il programma da monitorare. Se il programma è già in esecuzione allora bisogna ispezionare una jvm in esecuzione e, ripeto, non è come fare 2+2.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.