8
votes

Comment puis-je vérifier si la touche de verrouillage des capuchons est enfoncée?

D'accord, avant que cela ne soit signalé comme une duplication possible, j'ai déjà essayé le code suivant: xxx

et il se retourne toujours faux pour moi [voir ci-dessous]. Est-ce que quelqu'un pourrait confirmer si cela est censé fonctionner et je l'abuse, ou si cela est connu d'être cassé? S'il est en fait cassé, quelqu'un a-t-il une meilleure méthode à utiliser?

EDIT:

D'accord, je viens de découvrir quelque chose de plus. Il semble juste de retourner ce qu'il était au début de mon lancement de programmes. Si je démarre le programme avec cela, il est dit que c'est sur, et vice versa. Voici mon code: xxx

et c'est toujours toujours imprimer tout ce qu'il a commencé comme

(ex. Si je commence par des capuchons verrouillés, même si je Basculez-le juste après, il imprime:

Caps Lock est maintenant: ON

Caps Lock est maintenant: ON

Caps Lock est maintenant: ON

Caps Lock est maintenant: ON

etc., Si je commence avec elle désactivé, il imitera quoi que ce soit)


11 commentaires

Related: Stackoverflow.com/Questtions/88434/...


Que fonctionne ou ne fonctionnera pas sur votre environnement. Qu'est-ce que c'est? Un environnement d'interface graphique est tout à fait différent de l'environnement de la ligne de commande.


@assylias, oui, a déjà vu cela, il ne fonctionne tout simplement pas pour moi.


@Hot se lèche pas sûr de ce que vous entendez par là, mais voyez mon édition


Pouvez-vous essayer cette paix de code s'il vous plaît: [ICI] [1] [1]: Stackoverflow.com/questions/160315/...


en relation? bugs.sun.com/bugdatabase/view_bug.do?bug_id=4414164


-1 pour ne pas spécifier l'environnement.


@Hotlicks umm. -1 pour vous être stupide? Je ne dis-je pas sûr de ce que vous entendez par là, ce qui signifie s'il vous plaît expliquer plus loin. Vous ne downez pas les gens parce qu'ils vous demandent ce que vous vouliez dire par quelque chose.


@Abdousoft qui fonctionnera bien, la question est que la question est que plus tard dans mon code si je l'appelle à nouveau, cela renvoie toujours la valeur lorsque le programme a été démarré, même si l'état de verrouillage des capuchons a changé.


Êtes-vous en cours d'exécution sous un environnement d'interface graphique? Si oui, lequel? Ou utilisez-vous simplement le programme de la ligne de commande (quel système d'exploitation?) Ou d'un IDE (lequel?)?


@Hotlicks J'étais couru d'Eclipse, sous Windows, mais je ne voulais pas que le système d'exploitation l'affecte (ce qui signifie si vous aviez une solution pour Windows, je voulais qu'il fonctionne sur n'importe quel système d'exploitation)


3 Réponses :


5
votes

Poker autour, je pense que getLockingkeyState () pourrait être cassé.

Vous pouvez essayer Keyboardutils , mais On dirait que cela signifie que vous devez transporter des frais généraux de JNA.


3 commentaires

Je pense que je vais finir par utiliser des JNI et ajouter des auditeurs de clés mondiaux; Étant donné que je peux obtenir l'état de verrouillage des capuchons lors du démarrage et détecter lorsque c'est modifié (lorsque vous appuyez sur le bouton), je devrais être capable de le garder une trace dans un booléen et basculer en cas de besoin.


@Dave pourriez-vous donner un exemple d'usage de clavierutils?


@Alexejmagura: Désolé, non. C'est quelque chose que je connais, mais je n'ai jamais utilisé.



-1
votes
public void checkOnOff() {
    Thread th = new Thread() {
        public void run() {
            for (;;) {
                if (Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)) {
                    jLabel4.setForeground(Color.red);
                    jLabel4.setText("CAPSLOCK is ON");
                } else {
                    jLabel4.setText(null);
                }
                try {
                    sleep(100);
                } catch (InterruptedException ex) {
                    Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
                }                    
            }
        }
    };th.start();
}

2 commentaires

Vous pouvez remplacer jlabel4.SetText (votretext) avec system.out.println ()


Veuillez expliquer votre solution également, n'écrivez pas seulement le code.



1
votes

On dirait que c'était toujours cassé ou au moins depuis Java 1.3 (voir Bug 4414164 ).

Pas sûr pour d'autres plates-formes, mais pour Windows Je peux dire ceci: la variation de l'état du verrouillage des capsules peut être détectée, mais uniquement si votre client AWT a le focus. Cependant, il y a cette solution de contournement qui fonctionne pour moi: xxx

contraint: votre application AWT doit avoir l'accent avant d'appeler iScapsLockon . .

Remarque: votre robot peut appuyer sur une autre touche qui n'est pas nocive pour votre application. Pourrait dépendre de votre cas d'utilisation.


0 commentaires