Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Nel Formula 1 Technology and Media Centre di Biggin Hill, la velocità delle monoposto si trasforma in dati, immagini e decisioni in tempo reale grazie all’infrastruttura Lenovo che gestisce centinaia di terabyte ogni weekend di gara e collega 820 milioni di spettatori nel mondo
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
Il nuovo gimbal mobile DJI evolve il concetto di tracciamento automatico con tre modalità diverse, un modulo multifunzionale con illuminazione integrata e controlli gestuali avanzati. Nel gimbal è anche presente un'asta telescopica da 215 mm con treppiede integrato, per un prodotto completo per content creator di ogni livello
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-07-2009, 13:15   #1
jsdesign
Member
 
L'Avatar di jsdesign
 
Iscritto dal: Feb 2009
Messaggi: 31
[JAVA] ascoltare eventi da tastiera

come posso riuscire ad ascoltare qualsiasi evento da tastiera senza attribuire l'ascoltatore di eventi ad un componente di un frame?? L'idea di base è quella di far girare l'applicazione in background e registrare tutti i tasti premuti, come un key logger. Dovrei usare questa funzione per permettere ad un'applicazione di comparire e scomparire tramite la pressione di un tasto.

Grazie per la risposta.
__________________
JSoftware design
http://jsdesign.altervista.org/
jsdesign è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 14:14   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Non c'è una funzione ad hoc nelle librerie standard. Devi usare JNI.

Di solito però per funzioni del genere si usa l'area di notifica (TrayIcon).
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 14:55   #3
jsdesign
Member
 
L'Avatar di jsdesign
 
Iscritto dal: Feb 2009
Messaggi: 31
potresti spiegarti meglio...? io ho bisogno di questo servizio... come faccio?
__________________
JSoftware design
http://jsdesign.altervista.org/
jsdesign è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 15:40   #4
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da jsdesign Guarda i messaggi
potresti spiegarti meglio...? io ho bisogno di questo servizio... come faccio?
Come ha già detto PGI-bis, dovrai usare la tecnologia JNI.
Questo perchè ti tocca agire a livello di sistema, visto che vuoi ascoltare tutti gli eventi tastiera che (appunto) arrivano al sistema operativo.

Normalmente per ascoltare tali eventi su di un frame AWT o Swing basta apoggiarsi alle utilità fornite dal JDK perchè gli eventi sono prodotti appunto da un componente AWT/Swing che esiste dentro il contesto della tua applicazione che gira nella JVM.
Alla fine il componente GUI che usi si realizza grazie alla presenza di un "peer" nativo: questo fa da ponte grazie alla JVM con il sitema operativo sottostante, il quale smista gli eventi, e fa arrivare alle finestre native gli eventi che a queste interessano; dalle finestre native, tramite i "peer" si arriva al frame Java: ed è per questo che gli eventi del mouse o della tastiera arrivano ai componenti AWT/Swing.

Tu invece vuoi catturare eventi che non sono prodotti/mirati su nessun componente: non c'è appunto una funzione apposita nella libreria standard, perchè normalmente la cattura degli eventi generati dal sistema (nel constesto di AWT) è ristretta a quegli eventi che il sistema stesso mappa sulle finestre grafiche.


L'altra obiezione che ti poneva PGI-bis, se non ho frainteso, era che per fare quello che hai descritto, cioè:
- hai una applicazione Java in esecuzione;
- hai bisogno di farla sparire/riapparire;

si usa una apposita java.awt.TrayIcon (che ha la posiibilità di ascoltare eventi del mouse su se stessa) da piazzare sulla java.awt.SystemTray ("binding" lato Java della System Tray del sistema su cui gira la JVM, se esistente nel sistema stesso, in Windows per esempio c'è )

@EDIT:
Spiegazione molto rozza, spero di non aver scritto castronerie.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 15-07-2009 alle 15:58.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 16:37   #5
jsdesign
Member
 
L'Avatar di jsdesign
 
Iscritto dal: Feb 2009
Messaggi: 31
in c# si potrebbe fare quindi...
__________________
JSoftware design
http://jsdesign.altervista.org/
jsdesign è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 16:45   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
In C# sicuramente sì. Le API di C# sono le API di Windows, ci mancherebbe che si fossero dimenticati dei pezzi .

Cerca "SetWindowHookEx" o una roba del genere.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 20:06   #7
jsdesign
Member
 
L'Avatar di jsdesign
 
Iscritto dal: Feb 2009
Messaggi: 31
qualcosa di semiimplementato?
__________________
JSoftware design
http://jsdesign.altervista.org/
jsdesign è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 21:58   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
in java c'è jinput. Ad esempio:

Codice:
import net.java.games.input.*;
import static net.java.games.input.Component.Identifier.*;

public class Main {

	public static void main(String[] args) {
		ControllerEnvironment env = ControllerEnvironment.getDefaultEnvironment();
		Keyboard kb = null;
		for(Controller c : env.getControllers()) {
			if(c instanceof Keyboard) {
				kb = (Keyboard)c;
			}
		}
		final Keyboard keyboard = kb;
		Component[] comps = keyboard.getComponents();
		Component aKey = comps[37];
		Event event = new Event();
		for(int i = 0; i < 100; i++) {
			keyboard.poll();
			if(keyboard.isKeyDown(Key.A)) {
				System.out.println("bingo!!!");
			}
			try {
				Thread.sleep(100);
			} catch(InterruptedException ex) {return;}
		}
	}
}
Questo stampa un "bingo!!!" quando si preme A, usando il DirectInputEnvironmentPlugin in Windows.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2009, 00:24   #9
jsdesign
Member
 
L'Avatar di jsdesign
 
Iscritto dal: Feb 2009
Messaggi: 31
serve la libreria jinput, io l'ho caricata ma mi lancia un eccezione di tipo unsatisfied ecc.... che faccio??
__________________
JSoftware design
http://jsdesign.altervista.org/
jsdesign è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2009, 15:29   #10
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
ci sono delle librerie dinamiche insieme al jar (sia le dll windows che le so unix). Quelle librerie vanno in uno dei percorsi che java usa per caricare le librerie native. Tra questi percorsi è incluso quello di esecuzione del programma (la cartella da cui lanci il tuo programma).

Se usi Netbeans basta metterle nella cartella del progetto tramite la scheda files, per Eclipse non saprei ma immagino che sia una cosa simile.

Tra l'altro il codice che ho incollato ha un sacco di roba che non serve - ho spudoratamente riciclato un vecchio esperimento. La parte significativa è:

Codice:
package keytest;

import net.java.games.input.Component.Identifier.Key;
import net.java.games.input.Controller;
import net.java.games.input.ControllerEnvironment;
import net.java.games.input.Keyboard;

public class Main {

    public static void main(String[] args) {
	ControllerEnvironment env = ControllerEnvironment.getDefaultEnvironment();
	Keyboard kb = null;
	for (Controller c : env.getControllers()) {
	    if (c instanceof Keyboard) {
		kb = (Keyboard) c;
	    }
	}
	for (int i = 0; i < 100; i++) {
	    kb.poll();
	    if (kb.isKeyDown(Key.A)) {
		System.out.println("bingo!!!");
	    }
	    try {
		Thread.sleep(100);
	    } catch (InterruptedException ex) {
		return;
	    }
	}
    }
}
Aggiungi alle opzioni di esecuzione:

-Djinput.plugins=net.java.games.input.DirectInputEnvironmentPlugin -Djinput.useDefaultPlugin=false

altrimenti è necessario che il programma abbia almeno una finestra attiva.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2009, 11:04   #11
jsdesign
Member
 
L'Avatar di jsdesign
 
Iscritto dal: Feb 2009
Messaggi: 31
come aggiungo alle opzioni di esecuzione quei parametri?
le dll le ho messe in src, uso netbeans, ok?
__________________
JSoftware design
http://jsdesign.altervista.org/
jsdesign è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2009, 14:33   #12
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
in netbeans -> click col destro sul progetto -> properties-> run -> VM Options
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2009, 20:11   #13
jsdesign
Member
 
L'Avatar di jsdesign
 
Iscritto dal: Feb 2009
Messaggi: 31
Loading: net.java.games.input.DirectInputEnvironmentPlugin
java.lang.UnsatisfiedLinkError: no jinput-dx8 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at net.java.games.input.DirectInputEnvironmentPlugin$1.run(DirectInputEnvironmentPlugin.java:75)
at java.security.AccessController.doPrivileged(Native Method)
at net.java.games.input.DirectInputEnvironmentPlugin.loadLibrary(DirectInputEnvironmentPlugin.java:67)
net.java.games.input.DirectInputEnvironmentPlugin is not supported
at net.java.games.input.DirectInputEnvironmentPlugin.<clinit>(DirectInputEnvironmentPlugin.java:107)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at net.java.games.input.DefaultControllerEnvironment.getControllers(DefaultControllerEnvironment.java:156)
at keylogger.Main.main(Main.java:23)
Exception in thread "main" java.lang.NullPointerException
at keylogger.Main.main(Main.java:29)
Java Result: 1


Ho aggiunto le opzioni che dicevi e le dll necessarie in src... perchè continua a dare problemi??
__________________
JSoftware design
http://jsdesign.altervista.org/
jsdesign è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2009, 20:17   #14
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
dice che manca la dll jinput-dx8

Le dll che devi avere nella cartella del progetto sono

jinput-dx8.dll
jinput-raw.dll
jinput-wintab.dll

Se hai un os a 64bit sono:

jinput-dx8_64.dll
jinput-raw_64.dll
jinput-wintab.dll

Non devi metterle nella cartella src ma nella cartella del progetto. Se il progetto si chiama "bongo" allora hai nel filesystem una cartella bongo che contiene poi tutte le altre cartelle (build, src, nbproject, test). Devi mettere le dll in "bongo".
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 19-07-2009, 17:59   #15
jsdesign
Member
 
L'Avatar di jsdesign
 
Iscritto dal: Feb 2009
Messaggi: 31
Grazie mille ora funziona
Mi chiedevo... siccome la libreria la conta come esterna quando creo il jar; non si può fare qualcosa in modo che la includo in un unico pacchetto... o magari di questa jinput esistono i sorgenti??

GRAZIE
__________________
JSoftware design
http://jsdesign.altervista.org/
jsdesign è offline   Rispondi citando il messaggio o parte di esso
Old 19-07-2009, 18:06   #16
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Se la licenza lo permette (bisognerebbe guardare il sito) puoi sempre provare a "spacchettare il jar" - che è poi uno zip - e aggiungere il suo contenuto al tuo jar. Le liberie dinamiche tuttavia devono restare fuori dal Jar. Si possono distribuire dentro al jar ma bisogna comunque estrarle nel momento in cui il programma è lanciato (nella cartella user.dir).
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 19-07-2009, 22:30   #17
jsdesign
Member
 
L'Avatar di jsdesign
 
Iscritto dal: Feb 2009
Messaggi: 31
a questo punto ripiego su c#... c'è qualcosa di pronto?
__________________
JSoftware design
http://jsdesign.altervista.org/
jsdesign è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Apple disattiverà la sincronizzaz...
Google lancia l'allarme: attenzione ai m...
Primo test drive con Leapmotor B10: le c...
'Non può essere un robot': l'uman...
Monopattino elettrico Segway Ninebot Max...
Syberia Remastered è disponibile:...
Sony scopre che tutti i modelli AI hanno...
Amazon nasconde un -15% su 'Seconda Mano...
Due occasioni Apple su Amazon: iPhone 16...
Verso la fine della TV tradizionale? I g...
Cassa JBL a 39€, portatili, smartphone, ...
Cometa interstellare 3I/ATLAS: la sonda ...
Jensen Huang e Bill Dally di NVIDIA prem...
Il futuro della birra è green: H...
ECOVACS GOAT G1-2000: il robot tagliaerb...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:11.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v