Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
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


Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Addio console: Just Dance Now trasforma ...
Driver Radeon Adrenalin 25.10: perch&egr...
Oltre le GPU: NVIDIA annuncia NVQLink, ...
Samsung lancia il Team Galaxy Italia per...
Magic Leap: indistinguibili dai normali ...
Aruba Cloud: trasparenza sui costi e str...
Quando il cloud si blocca e resti al fre...
Integrare per competere, la sfida digita...
Leggenda del rally e modernità: S...
La Python Software Foundation rinuncia a...
Full HD e QLED, è in offerta un TV da 32...
Honda ha rilasciato un nuovo video sul p...
Resident Evil Requiem: arriva su Switch ...
Marshall Acton III in promo su Amazon in...
2 portatili che costano poco ma vanno be...
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: 22:46.


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