我正在尝试用 Golang 编写一个程序来从 Windows 剪贴板获取图像数据。我知道有一个插件可以从 Windows 剪贴板获取数据,问题是它不支持图像数据,仅支持文本。基本上不是我想要的。package mainimport ("fmt" "github.com/atotto/clipboard")func main() { str,err:=clipboard.ReadAll() if err!=nil { fmt.Println(err) }else { fmt.Println(str) }}这将输出“操作成功完成”。如果剪贴板包含图像,则会出现错误。知道如何做到这一点吗?更新!:我尝试传递CF_BITMAP给GetClipboardData,它返回位图(Hbitmap)的句柄。我不熟悉处理这个问题,但显然它是一个很长的无符号数字?使用该功能GdipCreateBitmapFromHBITMAP:var Bitmap *win.GpBitmap
pBitmap := &Bitmap
fmt.Println(win.GdipCreateBitmapFromHBITMAP(win.HBITMAP(Hbitmap),0,pBitmap))我得到了“ok”输出,但位图是空的。我又被困住了。我应该如何存储位图?
2 回答
皈依舞
TA贡献1851条经验 获得超3个赞
对于仍在寻找解决方案的任何人。这是一个可以处理 UTF8 和图像剪贴板数据的活动 Go 包:
https://github.com/golang-design/clipboard
它也是跨平台的(Linux/Windows/macOS),无需额外的依赖项,这是前面提到的 atotto/clipboard 包的一个很好的替代品。
潇湘沐
TA贡献1816条经验 获得超6个赞
问题
该github.com/atotto/clipboard
软件包似乎专门针对文本操作,并且它是跨平台的,所以这就是您所得到的。
在 Windows™ 上,该包使用标准 Win32 API 来访问剪贴板。具体来说,此语句调用GetClipboardData()
向其传递CF_UNICODETEXT
格式参数,这就是操作成功完成的原因:它返回剪贴板包含的文本(在您的情况下,无,一个空字符串)。
解决方案
GetClipboardData
最简单的解决方案是从该包中复制 Windows 特定代码的相关位,并修改对to的调用中的参数CF_BITMAP
。
更复杂的解决方案可能是首先执行一系列调用EnumClipboardFormats()
并确定是否有任何图像数据 ( CF_BITMAP
) 可用,并且GetClipboardData
仅在可用的情况下调用。
- 2 回答
- 0 关注
- 134 浏览
添加回答
举报
0/150
提交
取消