我试图以编程的方式向系统剪贴板添加一些文本,然后将其粘贴到一个随机的应用程序中,然后将剪贴板恢复到以前的状态,但Java似乎在这方面存在问题。在十次尝试中,它粘贴文本的次数不会超过八次,有时甚至会粘贴错误的文本(之前在剪贴板中的文本)。
任何帮助都将不胜感激!
public class ClipboardTestClass {
static Robot robot;
public static void main(String[] args) {
try {
robot = new Robot();
} catch (AWTException ex) {
Logger.getLogger(TestApp.class.getName()).log(Level.SEVERE, null, ex);
}
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
Logger.getLogger(TestApp.class.getName()).log(Level.SEVERE, null, ex);
}
for(int i = 0; i< 10; i++){
enterString("Hello\n");
}
}
public static void enterString(String myString){
System.out.println("Trying to paste string \"" + myString + "\"");
StringSelection stringSelection = new StringSelection(myString);
//save clipboard content
Transferable clipboardContent = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
//enter new clipboard content
Toolkit.getDefaultToolkit().getSystemClipboard().setContents((Transferable) stringSelection, null);
//paste clipboard content with Robot class
robot.keyPress(VK_CONTROL);
robot.keyPress(VK_V);
robot.keyRelease(VK_CONTROL);
robot.keyRelease(VK_V);
//restore clipboard content
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(clipboardContent, null);
}
}
发布于 2016-04-29 21:50:39
这永远不会可靠地工作。无论大小如何,您都必须处理所有格式。读一读延迟渲染(数据实际上并不存在于剪贴板上,直到有人请求粘贴它),你就会开始理解这个问题。一些应用程序,如Excel,可以提供25+格式的数据,其中一些非常大和复杂。没有时间或RAM来渲染它们。所以你不能把剪贴板还原成原来的样子。而且你根本不能更新剪贴板,否则会触发其他支持剪贴板的应用程序去做“他们的事情”。
最后,你不应该以这种方式使用剪贴板。剪贴板是为了方便用户而不是程序员而提供的共享资源。
找另一条路。
https://stackoverflow.com/questions/36897944
复制相似问题