Question

Je travaille au développement d'un clavier à l'écran avec Java. Ce clavier a un JComponent pour chaque touche possible. Lorsqu'une souris est enfoncée sur le bouton, je souhaite envoyer un code de clavier spécifique à l'application actuellement active. Le clavier lui-même se trouve dans un JFrame sans décorations et défini sur Toujours visible.

J'ai constaté que la classe Robot peut être utilisée pour simuler ces événements de clavier sur la file d'attente native. Cependant, dans ce cas, la sélection de JComponent signifierait que le raccourci clavier est reçu sur le JFrame et que je ne serais pas en mesure de le recevoir dans l'autre application.

Comment puis-je conserver mon clavier à l'écran "Toujours sans mise au point"? Est-il possible d'utiliser une autre approche pour envoyer la presse à clé?

Était-ce utile?

La solution 3

Apparemment, la seule façon de faire est d’avoir une couche JNI qui rendra la conversion de java en natif. Java n’offre pas de moyen facile d’offrir une telle fonctionnalité.

Cela pourrait être un concept intéressant pour une petite bibliothèque tierce pour ceux qui veulent apprendre JNI ...

Autres conseils

J'ai trouvé jnativehook lorsque j'essayais de contrôler un gamebot avec les commandes réelles du clavier et de la souris. (être plus "humain-like").

La seule solution que j'ai pu trouver jusqu'ici consiste à transformer chaque clé en un JComponent (afin qu'elle ne puisse pas avoir le focus), et à définir les propriétés suivantes sur le JFrame:

    setUndecorated(true);
    setFocusableWindowState(false);
    setFocusable(false);
    enableInputMethods(false);

Maintenant, en utilisant la classe robot, je peux envoyer des événements à n’importe quelle fenêtre active en cliquant sur les touches. La seule limitation est que cela ne semble fonctionner que pour les fenêtres appartenant à la même machine virtuelle, et que cela ne fonctionne pas du tout avec une autre fenêtre système.

avez-vous essayé d'appeler les fonctions natives setfocus () ou setactivewindow () pour déplacer le focus avant d'utiliser la classe robot?

Je ne connais aucun moyen de le faire de manière indépendante du système d'exploitation. Je ne connais pas Windows, mais il serait possible de discuter avec le serveur X via le protocole X.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top