Java 为什么CTRL+C(用Awt.Robot模拟)不能正常工作?

Java 为什么CTRL+C(用Awt.Robot模拟)不能正常工作?,java,awtrobot,Java,Awtrobot,我使用以下例程从浏览器中读取网页框架,并在第一次复制部分页面时始终获得相同的结果: 将鼠标移动到帧上 通过三次单击选择文本 使用模拟的CTRL+C键盘按键事件复制文本 打印复制的文本 如果鼠标仍在框架中,请转至步骤1 有关实现的详细信息,请参见下面的代码: final static int TIME_CONST = 10; final static int STEP_Y = 10; int x = 100; int y = 50; int count = 0; Robot robot = ne

我使用以下例程从浏览器中读取网页框架,并在第一次复制部分页面时始终获得相同的结果:

将鼠标移动到帧上 通过三次单击选择文本 使用模拟的CTRL+C键盘按键事件复制文本 打印复制的文本 如果鼠标仍在框架中,请转至步骤1 有关实现的详细信息,请参见下面的代码:

final static int TIME_CONST = 10;
final static int STEP_Y = 10;
int x = 100; 
int y = 50;
int count = 0;
Robot robot = new Robot();

while(y < 600) {
    robot.mouseMove(x, y);
    y += STEP_Y;
    Thread.sleep(TIME_CONST); 

    // Select text with triple mouse click
    robot.mousePress( InputEvent.BUTTON1_MASK ); 
    robot.mouseRelease( InputEvent.BUTTON1_MASK ); 
    robot.mousePress( InputEvent.BUTTON1_MASK ); 
    robot.mouseRelease( InputEvent.BUTTON1_MASK );
    robot.mousePress( InputEvent.BUTTON1_MASK ); 
    robot.mouseRelease( InputEvent.BUTTON1_MASK );
    Thread.sleep(TIME_CONST);   

    Sequence(robot, 5, KeyEvent.CTRL_MASK, KeyEvent.VK_C);
    Thread.sleep(TIME_CONST); 

    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();             
    Transferable contents = clipboard.getContents(clipboard);           
    boolean hasTransferableText = (contents != null) && contents.isDataFlavorSupported(DataFlavor.stringFlavor);

    String copyResult = "";
    if(hasTransferableText) {
        copyResult = (String) contents.getTransferData(DataFlavor.stringFlavor);
    }

    System.out.println("#"+(count++)+": " + copyResult);
} 
这应该起作用:

instance.keyPress(KeyEvent.VK_CONTROL);
Thread.sleep(200); 
instance.keyPress(KeyEvent.VK_C); 
Thread.sleep(200); 
instance.keyRelease(KeyEvent.VK_C); 
Thread.sleep(200); 
instance.keyRelease(KeyEvent.VK_CONTROL); 
Thread.sleep(200);

KeyEvent.VK_控件而不是KeyEvent.CTRL_掩码

三次单击是否有效?你看到文本被选中了吗?@Fortega三次单击工作右行被选中。contents.getTransferDataFlavor.stringFlavor始终从剪贴板返回同一对象。看起来像是'Sequencerobot,5,KeyEvent.CTRL\u MASK,KeyEvent.VK\u C'不像CTRL-C那样工作。你是对的,我必须在我的Sequencerobot程序中使用KeyEvent.VK\u控件而不是KeyEvent.CTRL\u MASK,int sleep,int。。。keyEvents方法。它起作用了。请将您的方法作为答案发布,我将接受它。@Fortega干得好$