如何在CF_HDROP格式上设置win32clipboard数据?

时间:2013-10-29 22:56:29

标签: python windows buffer clipboard

当我尝试将图像发送到剪贴板时,我遇到了alpha通道的丢失,所描述的here解决方案都没有使用我正在使用的软件,但是当我将png文件粘贴到此软件中时,似乎保留了alpha通道。 在这种考虑下,我想在Windows资源管理器允许的文件上模拟 Ctrl + C 。使用Clipview我发现字段15 : CF_HDROP与我的目标相关。尝试使用win32clipboard

设置此字段
import win32clipboard
win32clipboard.OpenClipboard(0)
file1="C:\\Users\\User\\Desktop\\test.png"
win32clipboard.SetClipboardData(15, file1)
win32clipboard.CloseClipboard()

我这样做没有任何错误,但是当我尝试使用这个新的剪贴板内容时它不起作用,因为所描述的there unicode文件名的元组必须存储在CF_HDROP中领域。

我不知道如何继续。我也尝试过 file1= (unicode('C:\\Users\\User\\Desktop\\CANEVAS\\test.png'),) 但是我收到了这个错误:

  

TypeError:期望一个可读的缓冲区对象。

1 个答案:

答案 0 :(得分:0)

documentation for CF_HDROP

  

数据由STGMEDIUM结构组成,其中包含全局内存对象。结构的hGlobal成员指向DROPFILES结构作为其hGlobal成员。

win32clipboard.GetClipboardData内置了对CF_HDROP的支持。它解码STGMEDIUM和DROPFILES结构以生成文件名元组。

文档没有声明SetClipboardData具有相应的代码来从文件名元组构造STGMEDIUM和DROPFILES结构。

我对Python或其FFI知之甚少,不知道构造结构并将它们传递给SetClipboardData函数是多么简单。或者,如果有现有的库可以为您执行此操作。