J'écris du code pour taper des chaînes en utilisant la classe Robot. Tout est bon pour la plupart (enfin, je dois utiliser une grosse instruction switch pour obtenir les keycodes), sauf que certaines touches n'ont pas de keycodes, car elles sont en réalité une combinaison de Shift + une autre touche. Pour les lettres majuscules, il est facile de vérifier, en utilisant Character.isUpperCase(c)
, mais pour tous les symboles tels que [email protected]#$%^&*()_+
et diverses ponctuations ne sont pas considérées comme des majuscules, bien qu'elles nécessitent un décalage pour être pressées afin de générer leur touche. J'ai essayé de googler pour cela, mais je viens de trouver un message sur le forum sans réponses satisfaisantes. Y a-t-il un moyen de déterminer si un personnage a besoin d'un décalage pour être pressé, et si oui, quel caractère est la version "non décalée"?Comment déterminez-vous si un caractère nécessite que la touche Majuscule soit enfoncée pour être tapée?
EDIT: Voici le code que j'ai jusqu'à présent.
public void GenerateKeyTyped(char c) {
if (Character.isUpperCase(c)) {
r.keyPress(KeyEvent.VK_SHIFT);
}
r.keyPress(GetKeyCode(c));
r.keyRelease(GetKeyCode(c));
if (Character.isUpperCase(c)) {
r.keyRelease(KeyEvent.VK_SHIFT);
}
}
Pouvez-vous poster du code (après avoir coupé l'instruction "switch", probablement gigantesque)? Il y a probablement une meilleure façon de faire ce que vous essayez de faire qui n'implique pas une tonne de code. Java sait comment convertir les codes-clés en caractères ASCII; il est très probable que vous pouvez déjà faire ce que vous voulez. –
Voici le code que j'ai jusqu'à présent, évidemment en ce moment, il ne fait pas ce que je veux. \t GenerateKeyTyped public void (char c) { \t \t if (Character.isUpperCase (c)) { \t \t \t r.keyPress (KeyEvent.VK_SHIFT); \t \t} \t \t r.keyPress (GetKeyCode (c)); \t \t r.keyRelease (GetKeyCode (c)); \t \t if (Character.isUpperCase (c)) { \t \t \t r.keyRelease (KeyEvent.VK_SHIFT); \t \t}} \t r est un robot, et GetKeyCode (char c) est l'instruction switch ginormous. Ce que j'essaie réellement de faire est de mettre en œuvre une API pour le contrôle du clavier qui a été écrit en pascal. Le GetKeyCode est activement pris en copiant simplement les valeurs du GetKeyCode de l'API directement. –
Ahh, le formatage est mauvais, donc je l'ai ajouté à la publication originale. –