如何通过Java class
将文本发送到计算机(如键盘)? 我已考虑使用Robot
类按下并释放每个键,但这将是单调乏味的,并且无法从char
获取KeyCode
。Java模拟键盘
Q
Java模拟键盘
2
A
回答
0
没有,也有软的方式(当然,在Windows上它的作品至少;-)):
private static void outputString(Robot robot,String str)
{
Toolkit toolkit = Toolkit.getDefaultToolkit();
boolean numlockOn = toolkit.getLockingKeyState(KeyEvent.VK_NUM_LOCK);
int[] keyz=
{
KeyEvent.VK_NUMPAD0,
KeyEvent.VK_NUMPAD1,
KeyEvent.VK_NUMPAD2,
KeyEvent.VK_NUMPAD3,
KeyEvent.VK_NUMPAD4,
KeyEvent.VK_NUMPAD5,
KeyEvent.VK_NUMPAD6,
KeyEvent.VK_NUMPAD7,
KeyEvent.VK_NUMPAD8,
KeyEvent.VK_NUMPAD9
};
if(!numlockOn)
{
robot.keyPress(KeyEvent.VK_NUM_LOCK);
}
for(int i=0;i<str.length();i++)
{
int ch=(int)str.charAt(i);
String chStr=""+ch;
if(ch <= 999)
{
chStr="0"+chStr;
}
robot.keyPress(KeyEvent.VK_ALT);
for(int c=0;c<chStr.length();c++)
{
int iKey=(int)(chStr.charAt(c)-'0');
robot.keyPress(keyz[iKey]);
robot.keyRelease(keyz[iKey]);
}
robot.keyRelease(KeyEvent.VK_ALT);
}
if(!numlockOn)
{
robot.keyPress(KeyEvent.VK_NUM_LOCK);
}
}
1
0
使用GUI测试框架(即使你不使用它进行测试)。我建议FEST。在FEST中,您可以搜索GUI元素并自动执行各种用户交互,包括输入文本。
例如,一旦你有一个文本字段夹具(用于包装,可以让你控制组件的FEST项),你可以做
JTextComponentFixture fixture = ...;
fixture.enterText("Some text");
0
@ JavaCoder-1337不完全...
虽然有些switch-case
(难道?)仍然需要处理一些(特殊)字符,大多数字符可以很容易地处理。
你需要多少取决于你目标受众,但无论情况下,可以通过组合处理:
AWTKeyStroke.getAWTKeyStroke(char yourChar).getKeyCode();
- 哪些 处理是最基本的;a-zA-Z
被转换为they'r基(a-z)
的KeyEvents,和其他一些字符也类似地(base key only, no modifiers thus no casing is applied)
处理。
可以想象,这种方法对于简化英文处理特别有效,因为与许多其他文字相比,该语言对重音字母的使用很少。
Normalizer.normalize(String textToNormalize, Form.NFD);
- 哪些分解最组成(重音)字符,如áàãâä,éèêë,íìîï,etc
,和they'r大写当量,以they'r底座元件。示例:á (224)
变为a (97)
,然后是´ [769]
。
如果您send(String text)
方法能够发送口音,重音的简单swap
(在本例中是VK_DEAD_ACUTE
)和它的信,让他们得到适当的发送顺序,你会得到期望的á
输出。从而消除了对过滤器的需求。
结合第一个简化,对于此示例,使得1/3 [´]
而不是3/3需要[a,á,´]
switch-case
!
这些只是简化许多简化方法中的一小部分,可以缩短许多同行程序员所提出的(不明智的)方法的极其长的方法switch-case
。
例如,可以很容易地通过检测是否要被发送的字符处理壳体是大写的,然后检测当前的CapsLock状态反转套管操作中,如果需要的话:
boolean useShift = Character.isUpperCase(c);
useShift = Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK) ? !useShift : useShift;
if (useShift) {
keyPress(KeyEvent.VK_SHIFT);
sendChar(aChar);
keyRelease(KeyEvent.VK_SHIFT);
} else {
sendChar(aChar);
}
另一个选项(我使用的)更简单一些,就是简单地用一种更适合这种操作的工具/语言来编写宏(我使用并推荐AutoHotKey),并简单地称它为执行来自Java:
Runtime rt = Runtime.getRuntime();
//"Hello World!" is a command-line param, forwarded to the ahk script as it's text-to-send.
rt.exec(".../MyJavaBot/sendString.ahk \"Hello World!\"");
相关问题
- 1. 模拟键盘水龙头
- 2. 模拟键盘在linux
- 3. 模拟键盘事件
- 4. GUI键盘模拟器
- 5. Android模拟HID键盘
- 6. iPhone模拟器键盘iOS7.0
- 7. 按键模拟键盘按下“Shift”键
- 8. 如何模拟键盘/鼠标按键?
- 9. 虚拟键盘
- 10. 适用于Mac的Java虚拟键盘
- 11. java中的多语言虚拟键盘
- 12. Java中的“虚拟键盘”控件?
- 13. Android 3:模拟虚拟钢琴键盘的软键盘的行为
- 14. Android虚拟键盘KeyListener获取虚拟键盘按键
- 15. 谷歌文档模拟键盘
- 16. AppleScript模拟用户键盘输入
- 17. iPhone模拟器的键盘帮助
- 18. HTML按钮来激活键盘模拟
- 19. 使用镀铬扩展键盘模拟
- 20. 模拟键盘输入与Lua
- 21. Android模拟器的键盘短路?
- 22. 模拟键盘与织物中断
- 23. Android模拟器没有键盘
- 24. 安卓模拟器键盘不显示
- 25. Python来模拟键盘笔画
- 26. 模拟键盘按钮按[SDL库]
- 27. Apple脚本模拟键盘事件
- 28. Eclipse Android模拟器 - 键盘不工作
- 29. 键盘的iOS模拟器的
- 30. jQuery的事件触发模拟键盘
你想文本发送到其他程序或您自己的程序? – Pace
我的目标是发送文本到Word文档,谷歌搜索等。 – Confiqure