我正在尝试以编程方式将一些文本添加到系统剪贴板,从那里将其粘贴到随机应用程序并将剪贴板恢复到之前的状态,但Java似乎有问题。 在十次尝试中,它永远不会粘贴文本超过八次,有时甚至是错误的文本(之前在剪贴板中的文本)被粘贴。
非常感谢任何帮助!
def create
@grow = Grow.new(grow_params.merge(category: Category.create(cat_params)))
end
答案 0 :(得分:2)
这永远不会可靠。无论大小如何,您都必须处理所有格式。阅读延迟渲染(其中数据实际上并不存在于剪贴板上,直到请求粘贴它),您将开始了解问题。某些应用程序(如Excel)可以提供25种以上格式的数据,其中一些非常庞大且复杂。没有时间或RAM来渲染它们。
因此,您无法按原样恢复剪贴板。
并且你根本不能更新剪贴板,而不会触发其他可以识别剪贴板的应用程序"他们的东西"。
最后,你不应该这样使用剪贴板。剪贴板是一个共享资源,为方便用户而不是程序员提供
找另一种方式。
答案 1 :(得分:0)
对于字符串类型的内容(仅!!! ),我想出了以下代码段:
import static java.awt.Toolkit.getDefaultToolkit;
public class Main {
public static void main(String[] args) throws IOException, UnsupportedFlavorException {
Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
// Save the old data
String oldData = (String) systemClipboard.getContents(null).getTransferData(DataFlavor.stringFlavor);
// Now lets put some new data to clipboard!
StringSelection stringSelection = new StringSelection("Jai Hind!! Vandee Maatharam!!!!");
systemClipboard.setContents(stringSelection, null);
// Lets print the clipboard content
String newData = (String)
systemClipboard.getContents(null).getTransferData(DataFlavor.stringFlavor);
System.out.println("Here is the new data: [" + newData + "]");
// Now setting back the old clipboard content
StringSelection oldDataSelection = new StringSelection(oldData);
systemClipboard.setContents(oldDataSelection, null);
//Now hit CTRL+V in an editor and you should get back the old clipboard content (NOTE: Only String Contents!!!)
}