如何将一个普通格式的图像文件放到剪贴板以便粘贴到QQ或者WORD窗口??[已解决]
本帖最后由 轩辕小妖 于 2012-12-11 13:15 编辑最近的天气冷了好多,就像坛子的气氛一样~~
所以准备多多向大家请教`~
坛子可以找到将屏幕截图或者位图文件放到剪贴板以便粘贴的帖子,但没有找到如jpg,png或者是gif等格式的,而Bmp一般又比较大,所以希望可以找到方法,谢谢大家关注及回复 ~~
A大帮助解决了,代码如下(见#7):
#Include <GDIPlus.au3>
_SetClipboardPic('1.jpg')
Run('mspaint.exe')
WinWaitActive('未命名')
send('^v')
Func _SetClipboardPic($PicFile)
_GDIPlus_Startup()
Local $hBitmap = _GDIPlus_BitmapCreateFromFile($PicFile)
Local $hImage = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
Local $aRet = DllCall('user32.dll', 'ptr', 'CopyImage', 'ptr', $hImage, 'int', 0, 'int', 0, 'int', 0, 'int', 0x8 + 0x4)
Local $hBitmapCopy =$aRet
DllCall('user32.dll', 'bool', 'OpenClipboard', 'hwnd', 0)
DllCall('user32.dll', 'bool', 'EmptyClipboard')
DllCall('user32.dll', 'handle', 'SetClipboardData', 'uint', 2, 'handle', $hBitmapCopy)
DllCall('user32.dll', 'bool', 'CloseClipboard')
_WinAPI_DeleteObject($hBitmapCopy)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_ShutDown ()
EndFunc ;==>_SetClipboardPic 我是酱油党 飘过 本帖最后由 netegg 于 2012-12-4 15:35 编辑
只能给lz一个方向,看udf里clipboard关于format的函数,具体怎么操作,自己琢磨吧
但是有一点要说明,不是说剪贴板上的数据类型都可以贴出来,目标容器如果不支持,即使剪贴板上的数据是对的也没用 _ClipBoard_SetDataEx _ClipBoard_Open(0)
_ClipBoard_Empty()
_ClipBoard_SetDataEx($hBitmap, $CF_BITMAP)
_ClipBoard_Close() 回复 5# xms77
这个是bmp格式的才可以吧?? 回复 4# seniors
_ClipBoard_SetDataEx 需要的 $hBitmap 参数好像不是普通的 位图图像句柄,试过
_GDIPlus_BitmapCreateFromHBITMAP
_GDIPlus_BitmapCreateHBITMAPFromBitmap
都不行……
比较笨的方法就是先转成BMP格式临时文件,_ClipBoard_SetDataEx 之后再删除临时BMP文件。 我是从QR 制造者那个帖子中看到的
我没试过到底用什么图像句柄,还没研究 我也正被这个类似的问题困扰,还没找到解决方案,大家一起努力吧! 看来这问题解决起来不容易啊 回复 8# seniors
谢谢提醒,原来还需要 CopyImage#Include <GDIPlus.au3>
_SetClipboardPic('1.jpg')
Run('mspaint.exe')
WinWaitActive('未命名')
send('^v')
Func _SetClipboardPic($PicFile)
_GDIPlus_Startup()
Local $hBitmap = _GDIPlus_BitmapCreateFromFile($PicFile)
Local $hImage = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
Local $aRet = DllCall('user32.dll', 'ptr', 'CopyImage', 'ptr', $hImage, 'int', 0, 'int', 0, 'int', 0, 'int', 0x8 + 0x4)
Local $hBitmapCopy =$aRet
DllCall('user32.dll', 'bool', 'OpenClipboard', 'hwnd', 0)
DllCall('user32.dll', 'bool', 'EmptyClipboard')
DllCall('user32.dll', 'handle', 'SetClipboardData', 'uint', 2, 'handle', $hBitmapCopy)
DllCall('user32.dll', 'bool', 'CloseClipboard')
_WinAPI_DeleteObject($hBitmapCopy)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_ShutDown ()
EndFunc ;==>_SetClipboardPic
回复 11# afan
也就是一定要gdi格式的,不能用gdi+格式的 标记一下,以后学习 回复afan
也就是一定要gdi格式的,不能用gdi+格式的
seniors 发表于 2012-12-8 15:42 http://www.autoitx.com/images/common/back.gif
用gdi+当然可以了,其实核心就是如何把GDIP+的HBITMAP转换成剪切板能认识的GDI32-BITMAP而已。
创建一个场境(DC),然后用强大的BitBlt函数SRCCOPY到剪切板上就可以了。 代码直接收下,谢谢.
页:
[1]
2