gpt4 book ai didi

java - 在Java中以编程方式粘贴后恢复剪贴板

转载 作者:行者123 更新时间:2023-12-02 03:40:26 25 4
gpt4 key购买 nike

我正在尝试以编程方式将一些文本添加到系统剪贴板,将其粘贴到随机应用程序,并将剪贴板恢复到之前的状态,但 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);
}
}

最佳答案

这永远不会可靠地工作。您必须处理所有格式,无论大小如何。阅读延迟渲染(在请求粘贴数据之前,数据实际上根本不存在于剪贴板上),您将开始理解这个问题。有些应用程序(例如 Excel)可以提供 25 种以上格式的数据,其中一些格式非常庞大且复杂。没有时间或内存来渲染它们。所以你无法将剪贴板恢复到原来的样子。而且您根本无法更新剪贴板,除非触发其他剪贴板感知应用程序执行“他们的事情”。
最后,您不应该以这种方式使用剪贴板。剪贴板是共享资源,是为了方便用户而不是程序员而提供的。
寻找另一种方式。

关于java - 在Java中以编程方式粘贴后恢复剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36897944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com