TC官方合作论坛

 找回密码
 立即注册
查看: 3155|回复: 12

[已解决] 怎样实现截图到剪贴板?

[复制链接]
发表于 2015-10-12 14:38:17 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
类似qq截图的功能。看了下自带截图只能保存为文件。是不是需要用到win32 api了?需要用哪些函数呢?
回复

使用道具 举报

发表于 2015-10-13 09:36:14 | 显示全部楼层
TC自带的像皮筋的示例里面 有写好的现成的方法 SetClipboardBmp
回复 支持 反对

使用道具 举报

发表于 2015-10-12 16:03:21 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-12 16:43:04 | 显示全部楼层
续花丶 发表于 2015-10-12 16:03
http://bbs.tyuyan.com/forum.php?mod=viewthread&tid=46562&highlight=%E5%89%AA%E5%88%87%E6%9D%BF   是 ...

这个插件跟TC自带截图函数结合使用貌似可以实现。但是中途需要在硬盘生成一个BMP文件。能否省去这一步直接在内存里完成?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-13 10:49:29 | 显示全部楼层
kevinqq 发表于 2015-10-13 09:36
TC自带的像皮筋的示例里面 有写好的现成的方法 SetClipboardBmp

非常感谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-13 21:32:49 | 显示全部楼层
kevinqq 发表于 2015-10-13 09:36
TC自带的像皮筋的示例里面 有写好的现成的方法 SetClipboardBmp

大神!关于橡皮筋事例.SetClipboardBmp函数我用了以后截出的图是一块黑块..函数里用到hdc,memhdc这两个变量我也依照示例进行了赋值,不知道问题出在哪,能否点拨一下?
回复 支持 反对

使用道具 举报

发表于 2015-10-14 11:09:35 | 显示全部楼层

  1. 直接改个源码给你吧 ,示例中内存中的图像做了一次备份,截的是最最层窗口上的图,下面直接截取当前桌面的
  2. function SetClipboardBmp(left,top,right,button)
  3.    
  4.     var CF_TEXT=1
  5.     var CF_BITMAP=2   
  6.    
  7.     var DesktopWindowHwnd = dllcall("user32.dll","int","GetDesktopWindow")  //取桌面窗口句柄
  8.     var DesktopWindowDC = dllcall("user32.dll","int","GetWindowDC","int", DesktopWindowHwnd)  //取窗口设备场景
  9.    
  10.     var ClipDc = dllcall("gdi32.dll","int","CreateCompatibleDC","int",DesktopWindowDC)  //创建一个内存DC,
  11.     var hBitmap = dllcall("gdi32.dll","int","CreateCompatibleBitmap","int",DesktopWindowDC,"int",right-left,"int",button-top)   
  12.     var hOldBitmap=dllcall("gdi32.dll","int","SelectObject","int",ClipDc,"int",hBitmap)
  13.     var ret=dllcall("gdi32.dll","int","BitBlt","int",ClipDc,"int",0,"int",0,"int",right-left,"int",button-top,"int",DesktopWindowDC,"int",left,"int",top,"int",#00CC0020) //将桌面图像拷贝进内存DC做备份   
  14.     hBitmap=dllcall("gdi32.dll","int","SelectObject","int",ClipDc,"int",hOldBitmap)
  15.    
  16.     dllcall("user32.dll","int","OpenClipboard","int",0) //打开剪切板
  17.     dllcall("user32.dll","int","EmptyClipboard") //清空剪切板
  18.     ret=dllcall("user32.dll","int","SetClipboardData","int",CF_BITMAP,"int",hBitmap) //复制图片
  19.     dllcall("user32.dll","int","CloseClipboard") //清空剪切板
  20.    
  21.     dllcall("user32.dll","int","DeleteObject","int",hOldBitmap) //释放由调用GetDC或GetWindowDC函数获取的指定设备场景
  22.     dllcall("user32.dll","int","DeleteObject","int",hBitmap) //释放由调用GetDC或GetWindowDC函数获取的指定设备场景
  23.     dllcall("user32.dll","int","DeleteDC","int",ClipDc) //释放由调用GetDC或GetWindowDC函数获取的指定设备场景
  24. end



复制代码

评分

参与人数 0威望 +10 金币 +10 收起 理由
sanmaodo + 10 + 10 这论坛多几个你这样慷慨解答的大神,必定会.

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2015-10-14 23:07:05 | 显示全部楼层
这论坛多几个你这样慷慨解答的大神,必定会兴旺起来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-15 12:01:02 | 显示全部楼层
非常感谢!程序目前已经正常运行!
回复 支持 反对

使用道具 举报

发表于 2016-1-14 11:02:57 | 显示全部楼层
很好,学习了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-10-2 02:08 , Processed in 0.037410 second(s), 24 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表