Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Hook sur clavier

3 réponses
Avatar
Phildes
Est-il possible de faire un Hook pour intercepter une touche précise du
clavier ?
Je voudrais "reveiller" mon appli lorsque l'utilisateur appuie sur une
touche "Fnum".

Merci

3 réponses

Avatar
Pasturel Jean-Louis
Phildes a écrit:
Est-il possible de faire un Hook pour intercepter une touche précise du
clavier ?
Je voudrais "reveiller" mon appli lorsque l'utilisateur appuie sur une
touche "Fnum".

Merci





Ayant été confronté à ce pb, je peux te répondre.

Il y a deux cas :
1) ton application java a une interface graphique ( swing/ awt) *et* tu
es sûr que ton application a toujours le focus sur ton écran : là c'est
du classique pure Java avec KeyListener.
2) Ton application n'a pas d'interface graphique *ou* n'est pas toujours
en Foreground, là tu es obligé de passer par le mécanisme d'extension
Java Native Interface et de te servir des bibliothèques OS propriétaires.

Si ton OS est Windows la fonction Win32 qur tu peux utiliser pour ton
interface JNI est GetAsyncKeyState (Voir Doc sur MSDN) ou recherche
sous google avec le mot clé keylogger .
La fonction retourne un nombre si la touche vient d'etre appuyée, il
faut donc jongler avec une boucle sur l'état des touches claviers et les
threads java.

Avatar
Phildes
bibliothèques OS propriétaires
Hooo ! Je vais faire avec.


Merci pour ces explications très claires.

Phildes



"Pasturel Jean-Louis" a écrit dans le message de
news: c1q5a7$mrm$
Phildes a écrit:
Est-il possible de faire un Hook pour intercepter une touche précise du
clavier ?
Je voudrais "reveiller" mon appli lorsque l'utilisateur appuie sur une
touche "Fnum".

Merci





Ayant été confronté à ce pb, je peux te répondre.

Il y a deux cas :
1) ton application java a une interface graphique ( swing/ awt) *et* tu
es sûr que ton application a toujours le focus sur ton écran : là c'est
du classique pure Java avec KeyListener.
2) Ton application n'a pas d'interface graphique *ou* n'est pas toujours
en Foreground, là tu es obligé de passer par le mécanisme d'extension
Java Native Interface et de te servir des bibliothèques OS propriétaires.

Si ton OS est Windows la fonction Win32 qur tu peux utiliser pour ton
interface JNI est GetAsyncKeyState (Voir Doc sur MSDN) ou recherche
sous google avec le mot clé keylogger .
La fonction retourne un nombre si la touche vient d'etre appuyée, il
faut donc jongler avec une boucle sur l'état des touches claviers et les
threads java.




Avatar
TestMan
Phildes a écrit:

Est-il possible de faire un Hook pour intercepter une touche précise du
clavier ?
Je voudrais "reveiller" mon appli lorsque l'utilisateur appuie sur une
touche "Fnum".




Pour simplifier ton TAF et t'eviter de coder du C/C++ Tu peux tutiliser
des API style Jawin (http://sourceforge.net/projects/jawinproject/) ou
xFunction (http://www.excelsior-usa.com/xfunction.html)

Ça marche nicket et evite les prises tête !
À noter que si tu met du code natif je te conseille de "cantonner" ton
code natif dans des classes dont l'execution n'est pas indispensable.

Dans ton cas si les classent échouent bien sur l'appli sera moins
"ergonomique" mais inutile d'interdir à l'utilisateur de pouvoir s'en
servir. Il faut donc, correctement gérer les exceptions qui penvent
survenir si on lance l'appli sur un autre OS (ne disposant pas des API
que tu utilises). Pas tres compliqué, mais faut y penser ;-)

A+
TM