如何通過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. Powershell模擬鍵盤
- 3. Symbian模擬鍵盤輸入
- 4. 模擬鍵盤水龍頭
- 5. Python Pyo midi鍵盤模擬
- 6. 模擬鍵盤輸入
- 7. 模擬鍵盤事件
- 8. 在Windows上模擬鍵盤
- 9. GUI鍵盤模擬器
- 10. 模擬鍵盤在linux
- 11. Android模擬HID鍵盤
- 12. iPhone模擬器鍵盤iOS7.0
- 13. 按鍵模擬鍵盤按下「Shift」鍵
- 14. S60模擬器隱藏虛擬鍵盤
- 15. 如何模擬鍵盤/鼠標按鍵?
- 16. 用Jquery模擬鍵盤按鍵
- 17. 虛擬鍵盤
- 18. 數字小鍵盤到手機鍵盤模擬器..
- 19. vb.net如何模擬keydown和鍵盤的鍵盤
- 20. java中的多語言虛擬鍵盤
- 21. Java中的「虛擬鍵盤」控件?
- 22. 適用於Mac的Java虛擬鍵盤
- 23. 的Java Swing虛擬鍵盤上的JFrame
- 24. Android 3:模擬虛擬鋼琴鍵盤的軟鍵盤的行爲
- 25. Android虛擬鍵盤KeyListener獲取虛擬鍵盤按鍵
- 26. RDP窗口不響應鍵盤模擬
- 27. HTML按鈕來激活鍵盤模擬
- 28. 在Windows Mobile上模擬鍵盤事件
- 29. 谷歌文檔模擬鍵盤
- 30. 模擬用戶鍵盤放大屏幕
你想文本發送到其他程序或您自己的程序? – Pace
我的目標是發送文本到Word文檔,谷歌搜索等。 – Confiqure