怎么自动捕抓窗口(类似QQ截图)

几罗星人 2012-09-11 12:07:27
第一。没用过QQ自带的截图的去用用,在聊天窗口中间,上文本框与下文本框之间的工具栏里,有一个剪刀图案的就是截图。估计都用过了。有没有发现,如果在截图的时候,将鼠标指向某一个位置,那么截图的窗口就会框选鼠标当前指着的那个窗口。而且不仅是能看到的窗口,连任务栏上的不同区域(组成任务栏的特殊形态的窗口)也能被选上,这种功能是怎么做的?

第二。怎么拿到任务栏托盘区(通知区)的那个“窗口”的句柄,我用网上的一个句柄查看器,就有像问题一里的功能,这个软件取到了通知区的类名,标题,句柄等,但是我在VB里用类名和标题通过FindWindow去搜索,却没有找到(返回0),为什么?
...全文
2201 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
微wx笑 2014-11-23
  • 打赏
  • 举报
回复
窗口有层次关系的吧?
youyidianmimang 2013-02-17
  • 打赏
  • 举报
回复
引用
三,判断鼠标在这个窗口中的坐标,并遍历第一步的区域列表,发现在哪个区域内就按这个区域的四个顶点画个框框..

遍历区域列表的时候,如果找到多个个区域是符合的当前鼠标所在的坐标.那怎么取?因为无法获得当前鼠标下窗口的句柄;
如下图:

你怎么能确定是黄色的窗口,而不是其他两个?,鼠标所在的坐标都是符合它们2个的区域的.
嗷嗷叫的老马 2013-02-03
  • 打赏
  • 举报
回复
引用 6 楼 youyidianmimang 的回复:
你没考虑到,如果多个区域叠加重合的问题 ……
这个应该不是问题吧,不需要去考虑,直接得到区域即可. 难道有上层窗口覆盖的区域,你要让鼠标经过时把它前置不成?
youyidianmimang 2013-01-25
  • 打赏
  • 举报
回复
引用 5 楼 myjian 的回复:
EnumWindows就能得到所有顶级窗口的句柄啊. 有了句柄就啥都能干了呀,比如要像QQ截图一样实现鼠标走到哪就高亮哪个区域,那就: 一,在捕捉整屏图像前先用EnumWindows得到所有顶级窗口句柄以及其所占区域(GetWindowRect)并保存; 二,捕捉整屏图象,显示到一个自己的全屏顶级窗口里作为捕捉目标; 三,判断鼠标在这个窗口中的坐标……
你没考虑到,如果多个区域叠加重合的问题;
嗷嗷叫的老马 2012-09-11
  • 打赏
  • 举报
回复
EnumWindows就能得到所有顶级窗口的句柄啊.

有了句柄就啥都能干了呀,比如要像QQ截图一样实现鼠标走到哪就高亮哪个区域,那就:

一,在捕捉整屏图像前先用EnumWindows得到所有顶级窗口句柄以及其所占区域(GetWindowRect)并保存;

二,捕捉整屏图象,显示到一个自己的全屏顶级窗口里作为捕捉目标;

三,判断鼠标在这个窗口中的坐标,并遍历第一步的区域列表,发现在哪个区域内就按这个区域的四个顶点画个框框....

至于第二个问题,不知道你是不是按"TrayNotifyWnd"这个类名去找的?直接去找貌似是找不到的,要先找到整个任务栏句柄("Shell_TrayWnd"),再找到TrayNotifyWnd.

具体的结构使用SPY++看看就知道了.
现在还是人类 2012-09-11
  • 打赏
  • 举报
回复
“它的信息”是什么信息?用 GetWindowLong 和 SetWindowLong 就可以得到很多窗口有关的信息,看你具体要什么信息了。
几罗星人 2012-09-11
  • 打赏
  • 举报
回复
补充一下我的意图:
我要的不仅仅是截图,我要的还是窗口的句柄。

重点并不在第一个问题,而是在于第二个问题。

那个句柄查看工具能够通过这样的窗体捕获的方法确定我要的是托盘区的资料(句柄等信息),那么它确实取到了托盘区的类名和句柄。

所以,我要的也是捕捉到窗口本身,拿到它的信息,而不仅仅是去截图。
现在还是人类 2012-09-11
  • 打赏
  • 举报
回复
参考以下几个API函数
GetDesktopWindow
GetWindowDC
BitBlt
用法:
在窗口中建立一个PictureBox对象,然后弄个按钮放入以下代码看看

BitBlt Picture1.hDC,0,0,Screen.Width/15,Screen.Height/15,GetWindowDC(GetDesktopWindow),0,0,vbSrcCopy
贝隆 2012-09-11
  • 打赏
  • 举报
回复
建议使用GDI+来实现,几下左上角坐标和右下角坐标,然后对该区域绘制一定透明度的覆盖层(类似qq),同样的道理,可以复制该区域桌面的内容,然后绘制到你想要绘制的区域即可。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧