java - 如何使用 Java 机器人类获取按键欧洲“è”字符
问题描述
我正在为我的应用程序编写一个虚拟键盘,并且我正在使用 Java 机器人来模拟每个键盘按钮的按键事件。一切都是正确的,除了我找不到欧洲特殊字符的键码,特别是意大利字符。扫描所有可能的代码,我发现:
à is KeyEvent.VK_DEAD_ABOVERING
ì is KeyEvent.VK_DEAD_CIRCUMFLEX
ò is KeyEvent.VK_DEAD_CEDILLA
ù is KeyEvent.VK_DEAD_GRAVE
但我错过了“è”的键码,看起来好像没有代码可以产生这个字符。
我也已经尝试使用打印出物理键盘上按下的每个键的工具来获取丢失的代码,但是对于上述每个字符(包括“è”),我都得到“未知”。
这是一段代码来测试它
package robottest;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
public class RobotTest {
private static Robot robot;
public static void main(String[] args) {
// TODO code application logic here
try {
robot = new Robot();
int keyCode = KeyEvent.VK_DEAD_CARON;
robot.keyPress(keyCode);
robot.keyRelease(keyCode);
} catch (AWTException ex) {
System.out.println("Exception"+ex);
}
}
}
它是最小的,你可以编译它并运行
java -jar RobotTest.jar
这是我修改源代码以充当一种“代码扫描仪”的内容...
package robottest;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import javafx.scene.input.KeyCode;
public class RobotTest {
private static Robot robot;
public static void main(String[] args) {
// TODO code application logic here
try {
robot = new Robot();
/* int keyCode = KeyEvent.VK_DEAD_BREVE;
robot.keyPress(keyCode);
robot.keyRelease(keyCode);
*/
for (int keyCode = KeyEvent.VK_DEAD_GRAVE; keyCode <KeyEvent.VK_DEAD_GRAVE+20; keyCode++) {
System.out.print("Code "+keyCode+" ");
robot.keyPress(keyCode);
robot.keyRelease(keyCode);
System.out.println("");
}
} catch (AWTException ex) {
System.out.println("Exception"+ex);
}
}
}
输出是:
Code 128 ù
Code 129 ,
Code 130 ì
Code 131 3
Code 132 -
Code 133 ù
Code 134
Code 135 .
Code 136 à
Code 137 2
Code 138
Code 139 ò
Code 140 0
Code 141
Code 142
Code 143
Code 144
Code 145
Code 146
Code 147
解决方案
您正在寻找的价值是VK_DEAD_CARON
,代码138
您可以从ASCII
table 开始找到与字符关联的任何值:搜索其数值,然后您将在 java 中找到关联的变量KeyEvent
另一种可能性是实现自定义键盘
推荐阅读
- reactjs - 如何将授权令牌从反应传递到弹簧启动
- python-3.x - Python Pillow - 在带有字体颜色的框架上绘制文本
- python - 缩放图像图的轴
- c++ - 为什么 cin >> ws 使程序在末尾有空格时不终止?
- python - 使用 GridSearchCV 进行逻辑回归时的精度计算警告
- excel - VBA - 即使匹配是收件箱中的第一封电子邮件,代码也需要 5 分钟以上的时间来搜索收件箱 - 我该如何加快速度?
- xml - xsl position() 总是返回“1”
- arrays - Postgres SQL:如何创建约束以检查元素不在字符串数组中
- sql - 透视连接表
- trigonometry - (wx) Maxima:重新定义用于括号的 tex,当应用指数时