为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 Windows 剪贴板获取图像数据

如何从 Windows 剪贴板获取图像数据

Go
HUX布斯 2023-08-07 10:54:01
我正在尝试用 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 包的一个很好的替代品。


查看完整回答
反对 回复 2023-08-07
?
潇湘沐

TA贡献1816条经验 获得超6个赞

问题

github.com/atotto/clipboard软件包似乎专门针对文本操作,并且它是跨平台的,所以这就是您所得到的。

在 Windows™ 上,该包使用标准 Win32 API 来访问剪贴板。具体来说,此语句调用GetClipboardData()向其传递CF_UNICODETEXT格式参数,这就是操作成功完成的原因:它返回剪贴板包含的文本(在您的情况下,无,一个空字符串)。

解决方案

GetClipboardData最简单的解决方案是从该包中复制 Windows 特定代码的相关位,并修改对to的调用中的参数CF_BITMAP

更复杂的解决方案可能是首先执行一系列调用EnumClipboardFormats()并确定是否有任何图像数据 ( CF_BITMAP) 可用,并且GetClipboardData仅在可用的情况下调用。


查看完整回答
反对 回复 2023-08-07
  • 2 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信