微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

直接从Windows剪贴板获取二进制数据

如何解决直接从Windows剪贴板获取二进制数据

InsideClipboard显示内容的MIME类型为application/spark editor

您应该能够通过使用构造函数创建MIME类型DataFlavor,DataFlavor(String mimeType, String humanReadableFormat)在这种情况下,类表示形式将是一种InputStream您可以从中提取字节的经典方式…

但是,此剪贴板实现对mime类型定义非常严格,并且您不能使用ID格式的空格,这太糟糕了,因为您的编辑器似乎在其中放置了一个空格:(

JavaFX的剪贴板管理更加宽松,并且可以容纳剪贴板中的各种“格式名称”(InsideClipboard称呼它们),而不仅仅是type/subtypeawt中的无空格哑剧格式。

例如,使用LibreOffice Draw 4.2并复制一个Rectangle形状,awt仅看到一种application/x-java- rawimage格式,而JavaFX看到与InsideClipboard相同的所有格式:

[application / x-java-rawimage],[PNG],[Star Object Descriptor(XML)],[cf3],[Windows位图],[GDIMetaFile],[cf17],[Star Embed Source(XML)],[图纸格式]

然后,您可以从JavaFX剪贴板中获取原始数据 java.nio.ByteBuffer

//with awt
DataFlavor[] availableDataFlavors = Toolkit.getDefaultToolkit().getSystemClipboard().getAvailableDataFlavors();
System.out.println("Awt detected flavors : "+availableDataFlavors.length);
for (DataFlavor f : availableDataFlavors) {
    System.out.println(f);
}

//with JavaFX (called from JavaFX thread, eg start method in a javaFX Application
Set<DataFormat> contentTypes = Clipboard.getSystemClipboard().getContentTypes();
System.out.println("JavaFX detected flavors : " + contentTypes.size());
for (DataFormat s : contentTypes) {
        System.out.println(s);
}

//let's attempt to extract bytes from the clipboard containing data from the game editor
// (note : some types will be automatically mapped to Java classes, and unkNown types to a ByteBuffer)
// another reproducable example is type "Drawing Format" with a Rectangle shape copied from LibreOffice Draw 4.2
DataFormat df = DataFormat.lookupMimeType("application/spark editor");
if (df != null) {
    Object content = Clipboard.getSystemClipboard().getContent(df);
    if (content instanceof ByteBuffer) {
        ByteBuffer buffer = (ByteBuffer) content;
        System.err.println(new String(buffer.array(), "UTF-8"));
    } else
        System.err.println(content);
}

解决方法

我一直在脑子里对着桌子打一个小时,现在只是想找到某种说出来的方法……从剪贴板上拿出一个字节数组。相反,我似乎只能找到有关如何从剪贴板中获取 纯文本
的信息……这根本没有帮助。

我试过以下操作:Java获取剪贴板的字节数

我也尝试过以下操作:http : //mrbool.com/manipulating-clipboard-content-with-
java/24758

每次遇到“不受支持”的愚蠢DataFlavor时。当然这里还有一些简单的我失踪这里…我的意思是......如何支持纯文本,图像和Java对象,但不具备基本功能,只是
必须是 这一切的引擎盖下?

抱歉,如果我听起来很讽刺并且在这里生气……Java似乎对我有影响。:(

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。