JAVA Robot类 操作快捷键的具体先后问题
这个问题可能不太容易说清楚,是这样的,我希望在ROBOT操作快捷键ctrl+c复制文本后马上从剪贴板从特到该文本。代码如下protectedStringgetClipbo...
这个问题可能不太容易说清楚,是这样的,我希望在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之后并没有马上执行吗? 展开
代码如下
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之后并没有马上执行吗? 展开
展开全部
不是很明白你说的具体内容
不过你的代码可能有问题
robot robot.keyPress(KeyEvent.VK_CONTROL);
类似这样的方法,应该有一个按下,一个释放,没看到你有释放的代码,这样就相当于你按住键没有放开,你可以试一下,在键盘上这样做的话,只有等到下一次按键,才会使上一次的按键释放掉。
另外。不知道你要复制什么文本,如果是程序的控制的话,我记都,Text,JTextArea这一类的控制都有copy方法,可以将你选择的内容放到内存的剪贴版里,不需要你自己来写实现。
不过你的代码可能有问题
robot robot.keyPress(KeyEvent.VK_CONTROL);
类似这样的方法,应该有一个按下,一个释放,没看到你有释放的代码,这样就相当于你按住键没有放开,你可以试一下,在键盘上这样做的话,只有等到下一次按键,才会使上一次的按键释放掉。
另外。不知道你要复制什么文本,如果是程序的控制的话,我记都,Text,JTextArea这一类的控制都有copy方法,可以将你选择的内容放到内存的剪贴版里,不需要你自己来写实现。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
output(getClipboardText(this.sysc));
this.sysc是什么???
this.sysc是什么???
更多追问追答
追问
是系统的剪贴板的对象
private Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
就是这个,忘了贴上来了
追答
我想知道你是怎样调用你那些方法的。从你给出的代码里看不出你怎样调用。
另外你的代码风格很不好。
r.keypress() 是不是在函数返回的时候就马上生效?
是的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-12-03
展开全部
把你的代码全部贴出来
追问
全部很多啊,而且用到了第三方的包。。。。
这样吧,我只想知道。robot类所调用的函数
r.keypress() 是不是再函数返回的时候就马上生效?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有个东东叫做剪贴板查看器,你的明白?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
去相关论坛发帖求助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询