【问题标题】:How to set win32clipboard data on CF_HDROP format?如何设置 CF_HDROP 格式的 win32clipboard 数据?
【发布时间】:2013-10-29 22:56:29
【问题描述】:

当我尝试将图像发送到剪贴板时,我遇到了 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: 期望一个可读的缓冲区对象。

【问题讨论】:

    标签: python windows buffer clipboard


    【解决方案1】:

    documentation for CF_HDROP 说

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-12
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 2011-10-24
      • 1970-01-01
      • 2015-04-10
      相关资源
      最近更新 更多