WM.*_*WM. 3 java swing awt awtrobot
我使用以下循环,但它只输入第一个字符,其余为数字,任何想法?
import java.awt.*;
import javax.swing.KeyStroke;
public class test {
public static void main(String[] args) throws AWTException
{
Robot r = new Robot();
String s = "Face";
for (int i = 0; i < s.length(); i++)
{
char res = s.charAt(i);
r.keyPress(res);
r.keyRelease(res);
r.delay(1000);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出输入:F135
cam*_*ckr 10
keyPress/Release方法需要一个int值,表示要键入的字符.这些值是由KeyEvent.VK _ ???确定的每个字符的关键代码.变量.
尝试:
import java.awt.*;
import java.util.*;
import java.lang.reflect.Field;
import java.awt.event.*;
import javax.swing.*;
public class RobotCharacter
{
public static void main(String[] args)
throws Exception
{
JTextField textField = new JTextField(10);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.add( textField );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
Robot robot = new Robot();
typeCharacter(robot, "a");
typeCharacter(robot, "b");
typeCharacter(robot, "C");
typeCharacter(robot, "D");
}
public static void typeCharacter(Robot robot, String letter)
{
try
{
boolean upperCase = Character.isUpperCase( letter.charAt(0) );
String variableName = "VK_" + letter.toUpperCase();
Class clazz = KeyEvent.class;
Field field = clazz.getField( variableName );
int keyCode = field.getInt(null);
robot.delay(1000);
if (upperCase) robot.keyPress( KeyEvent.VK_SHIFT );
robot.keyPress( keyCode );
robot.keyRelease( keyCode );
if (upperCase) robot.keyRelease( KeyEvent.VK_SHIFT );
}
catch(Exception e)
{
System.out.println(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,即使这样也不适用于所有角色.例如,在我的键盘上,"%"高于"5".您不能使用VK_PERCENT.所需的关键行程是VK_5以及换档.无法知道键盘的实际映射以自动执行此操作.
所以机器人不是一个很好的方法.
归档时间: |
|
查看次数: |
8417 次 |
最近记录: |