OVH Cloud OVH Cloud

KeyInput application en tache de fond

5 réponses
Avatar
Jerome Lepage
Bonjour,

J'aimerais faire une application qui tourne en tache de fond (icone barre de
tache par exemple), mais qui agit lors de la pression d'une touche clavier.

Pour l'iconification (oula) en barre de tâche j'ai pas chercher encore, donc
normal que j'ai pas d'infos la dessus.

J'arrive à ce que l'appli fasse un événement quand on appuie sur une touche,
mais quand il s'agit de le faire quand la fenêtre est inactive c'est pas
évident. J'ai bien fait ma petit recherche sur le net mais sans succès...

Merci d'avance si quelqu'un à un debut de réponse.

Jerome

PS: Si quelqu'un avait un tuto sur java et le son en français et ben foutu,
je suis preneur...

5 réponses

Avatar
O.L.
Jerome Lepage a couché sur son écran :
Bonjour,

J'aimerais faire une application qui tourne en tache de fond (icone barre de
tache par exemple), mais qui agit lors de la pression d'une touche clavier.

Pour l'iconification (oula) en barre de tâche j'ai pas chercher encore, donc
normal que j'ai pas d'infos la dessus.


Tu parles bien de la systray (en bas à droite) ?

Je viens de trouver ça :
http://ovh.dl.sourceforge.net/sourceforge/systray/systray4j-2.4.1-win32.zip

Je l'ai téléchargé, la démo marche nickel :)


--
Olivier Ligny
Créateur web free-lance / www.cyber-tamtam.net

Avatar
Jerome Lepage
Tu parles bien de la systray (en bas à droite) ?


Oui pour la partie "tache de fond"

Olivier Ligny


Merci Olivier, ça à l'air cool.


Par contre, j'ai beau chercher je trouve pas comment capturer un évenement
(touche clavier) quand l'appli est en tache de found.

Je reste ouvert à vos idées.

Avatar
Hervé AGNOUX
Jerome Lepage wrote:


Par contre, j'ai beau chercher je trouve pas comment capturer un évenement
(touche clavier) quand l'appli est en tache de found.

Je reste ouvert à vos idées.


A ma connaissance, pratiquement par définition, les GUI modernes ne
délivrent pas d'événement clavier si la fenêtre n'a pas le focus.

Il me semble que c'est néanmoins possible pour les applis natives, mais en
tous les cas ce n'est pas possible en java.

Les icones systray, à ce que je peux voir, répondent à des événements
souris. Et les applis java sont elles aussi capables de répondre à des
événements souris, si la souris leur passe dessus, même si elles n'ont pas
le focus.

Je ne vois donc que la piste JNI, à moins que tu ne puisses négocier... Quel
est ton besoin à l'étape n-1 ?


--
Hervé AGNOUX
http://www.diaam-informatique.com

Avatar
TestMan
Bonsoir,

Hervé AGNOUX wrote:
Jerome Lepage wrote:


Par contre, j'ai beau chercher je trouve pas comment capturer un évenement
(touche clavier) quand l'appli est en tache de found.

Je reste ouvert à vos idées.
<..>


A ma connaissance, pratiquement par définition, les GUI modernes ne
délivrent pas d'événement clavier si la fenêtre n'a pas le focus.

Il me semble que c'est néanmoins possible pour les applis natives, mais en
tous les cas ce n'est pas possible en java.


L'enregistrement d'une touche étant spécifique à un OS, il faut
effectivement composer avec les limitations et les possibilités de chacun :(

Pour ce qui est de Win32, tu dois faire un truc du style :
http://www.codeproject.com/system/nishhotkeys01.asp

En utilisant com4j https://com4j.dev.java.net/ sur la lib user32, tu
coderas ça directement depuis du Java et ça devrait le faire et t'éviter
les maux de têtes du JNI & C++ ....
(Je ne l'ais pas testé sous com4j mais j'avais fait un truc avec
JNIWrapper il y a un bail http://www.jniwrapper.com/ )

Je te conseille d'encapsuler tout ça dans un singleton ou mieux un SPI
que tu pourras à loisir implémenter pour de nouvelle plateformes selon
tes besoins.

Attention, faire une touche de racourcis global peut avoir des
conséquences surprenantes selon les différents
logiciels/pilotes/configuration installés ... on se souvient de ICQ qui
avalé les racourcis utilisés dans certaines IDE Java, pas trés
pratique en somme. Le mieux est de prévoir une option persistente
(java.util.prefs.Preference) pour que l'utilisateur puisse le désactiver
via une option.

Bon code ...

A+

TM


Avatar
Simon OUALID
Jerome Lepage wrote:

Par contre, j'ai beau chercher je trouve pas comment capturer un évenement
(touche clavier) quand l'appli est en tache de found.

Je reste ouvert à vos idées.




Je crois avoir lu un article qui disait qu'en poussant sa propre
EventQueue, on pouvait récupérer les évènements systèmes sous forme
d'objets Java.

Ca peut marcher pour des shortcuts globaux je pense (à tester en fait).

Ca donnerait ça :

public class MyEventProcessor extends EventQueue {

public MyEventProcessor() {
Toolkit.getDefaultToolkit().getSystemEventQueue().push( this );
}

protected void dispatchEvent( AWTEvent e ) {
// On choppe et on traite les évènements qui nous intéressent ici...
if (e instanceof KeyEvent) {
// etc ...
}
super.dispatchEvent( e );
}

}

Dis nous si ça fonctionne ! :p