这个问题可能不太容易说清楚,是这样的,我希望在ROBOT操作快捷键 ctrl+c 复制文本后马上从剪贴板从特到该文本。
代码如下
protected String getClipboardText(Clipboard clip) throws Exception {
// 获取剪切板中的内容
Transferable clipT = clip.getContents(null);
if (clipT != null) {
// 检查内容是否是文本类型
if (clipT.isDataFlavorSupported(DataFlavor.stringFlavor))
return (String) clipT.getTransferData(DataFlavor.stringFlavor);
}
return null;
}
public void onHotKey(int aIdentifier) {
if(aIdentifier==88)
copy();
//output("WM_HOTKEY message received " + Integer.toString(aIdentifier));
}
public void copy()
{
try {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_C);
robot.keyRelease(KeyEvent.VK_CONTROL);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getThetext() {
try {
output(getClipboardText(this.sysc));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
当我按下 win+A的时候映射到ctrl+c来复制文本。然后程序得到文本。但是奇怪的是
在copy()函数调用之后,取得剪贴板中的string并不是当前复制的文本,而是上一次复制的文本,看起来就像是复制过程在粘贴之前。也就是说每一次都是先从剪贴板拿出,再复制。。。。。。
为什么会这样?
robot在调用 press ctrl+c之后并没有马上执行吗?
是系统的剪贴板的对象
private Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
就是这个,忘了贴上来了
我想知道你是怎样调用你那些方法的。从你给出的代码里看不出你怎样调用。
另外你的代码风格很不好。
r.keypress() 是不是在函数返回的时候就马上生效?
是的
这个代码从网上的拿来修改的,我知道搞的很乱了。。。
总结起来就是
利用r.keypress()操作键盘 ctrl+c 复制文本后
马上提取系统剪贴板的内容,发现是复制文本之前的内容。
但是继续重复操作会发现,之前的复制确实成功了。
比如。
第一次ctrl+c 复制“好烦啊”
显示的是:“上一次的信息”
第二次ctrl+c 复制“天气好”
显示的是:“好烦啊”
。。。
。。
这种
你现在描述的还是代码执行的结果。我现在问的是你代码编写时的调用顺序。
追问恩,首先是这个,监听全局快捷键, aIdentifier是快捷键的ID
public void onHotKey(int aIdentifier)
函数返回之后
调用 getThetext()
这两个函数是第三方的接口,是自动调用的。
另外的两个是 getClipboardText 是网上copy的
public void copy()自己写的
你自己用eclipse的debug吧。
追问额
本回答被提问者采纳全部很多啊,而且用到了第三方的包。。。。
这样吧,我只想知道。robot类所调用的函数
r.keypress() 是不是再函数返回的时候就马上生效?