TC官方合作论坛

标题: 怎样实现截图到剪贴板? [打印本页]

作者: rock_wolf    时间: 2015-10-12 14:38
标题: 怎样实现截图到剪贴板?
类似qq截图的功能。看了下自带截图只能保存为文件。是不是需要用到win32 api了?需要用哪些函数呢?
作者: 续花丶    时间: 2015-10-12 16:03
http://bbs.tyuyan.com/forum.php? ... A%E5%88%87%E6%9D%BF   是不是要这个..
作者: rock_wolf    时间: 2015-10-12 16:43
续花丶 发表于 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文件。能否省去这一步直接在内存里完成?
作者: kevinqq    时间: 2015-10-13 09:36
TC自带的像皮筋的示例里面 有写好的现成的方法 SetClipboardBmp
作者: rock_wolf    时间: 2015-10-13 10:49
kevinqq 发表于 2015-10-13 09:36
TC自带的像皮筋的示例里面 有写好的现成的方法 SetClipboardBmp

非常感谢
作者: rock_wolf    时间: 2015-10-13 21:32
kevinqq 发表于 2015-10-13 09:36
TC自带的像皮筋的示例里面 有写好的现成的方法 SetClipboardBmp

大神!关于橡皮筋事例.SetClipboardBmp函数我用了以后截出的图是一块黑块..函数里用到hdc,memhdc这两个变量我也依照示例进行了赋值,不知道问题出在哪,能否点拨一下?
作者: kevinqq    时间: 2015-10-14 11:09

  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



复制代码

作者: sanmaodo    时间: 2015-10-14 23:07
这论坛多几个你这样慷慨解答的大神,必定会兴旺起来。
作者: rock_wolf    时间: 2015-10-15 12:01
非常感谢!程序目前已经正常运行!
作者: wjyzl0569    时间: 2016-1-14 11:02
很好,学习了
作者: 高冷小Q    时间: 2016-1-14 16:31
橡皮筋谁鸡,巴能看
作者: 高冷小Q    时间: 2016-1-14 16:31
橡皮筋谁鸡,巴能看
作者: 高冷小Q    时间: 2016-1-14 16:31
橡皮筋谁鸡,巴能看




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1