2014-06-16 40 views
0

我已经阅读从浏览器中的网页框架具有以下常规并获得所有的时间相同的结果(第一次页面的复制部分):为什么CTRL + C(用Awt.Robot模拟)不能正常工作?

  1. 移动鼠标到框架
  2. 选择具有三重点击文字
  3. 复制文本与模拟CTRL + C键盘按事件
  4. 打印复制的文本
  5. 转到步骤#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); 
} 
+0

是否特里普尔点击的工作?你看到文字被选中了吗? – Fortega

+0

@Fortega三重点击工作正确(行被选中)。 'contents.getTransferData(DataFlavor.stringFlavor)'从剪贴板返回所有时间相同的对象。看起来'Sequence(robot,5,KeyEvent.CTRL_MASK,KeyEvent.VK_C)'不像CTRL-C那样工作。 –

+0

你是对的,我必须在我的'Sequence(Robot r,int sleep,int ... keyEvents)'方法中使用'KeyEvent.VK_CONTROL'而不是'KeyEvent.CTRL_MASK'。有用。请张贴您的方法作为答案,我将接受它。 –

回答

1

这应该工作:

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_CONTROL而不是KeyEvent.CTRL_MASK