c#高仿截图程序,自动捕获窗口的原理是什么?

写好几天了,我是将罩面窗体Enabled设为false再用ChildWindowFromPointEx过滤掉罩面递归寻找下面的窗口句柄,鼠标移动就不断的调用这个递归函数,... 写好几天了,我是将罩面窗体Enabled设为false再用ChildWindowFromPointEx过滤掉罩面递归寻找下面的窗口句柄,鼠标移动就不断的调用这个递归函数,发现鼠标指针很卡,跟QQ截图的速度没法比,我想知道QQ截图自动捕获窗口的原理是什么?

http://pan.baidu.com/s/1o6CvIh8这是我写的截图程序画板部分还没写,看看自动捕获窗口时鼠标指针很卡的样子
展开
 我来答
匿名用户
2014-03-07
展开全部
理论上不应该卡。第一我怀疑是重绘的问题,因为即使Disable掉还是会重绘的。第二也许你将抓子窗体的代码写在鼠标移动事件中,这会触发很多次的。想不卡就单跑线程去抓,不要影响UI。你可以学一下QQ,截图时自己先建一个全屏大的窗体放在顶端,背景使用全屏截图。抓子窗体句柄时忽略自己这个就好。可以一试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-07
展开全部
alt +截屏幕键
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
winmsing
2014-03-07 · TA获得超过612个赞
知道小有建树答主
回答量:414
采纳率:0%
帮助的人:427万
展开全部
用GetWindowRec  API函数。而不是用你这个函数,先用它获取整个窗口控件,会返回一个RECT值,这样便能完成捕获窗口,再直接传给画板就OK

步骤应该是这样-获取屏幕所有窗口句柄,先取得CLASSFORM STATTOOLBAR这两种类型窗口的RECT--获取鼠标当前所在位置X,Y----判断和取得鼠标所在窗口的句柄----继续判断和取得鼠标所在窗口的子窗口句柄-----获取子窗口RECT--高亮显示当前窗口(可以在屏幕画一个框,以表示捕获完成)。

看了QQ截图,好像不能直接截取某个按钮,估计是被过滤了,这样能加快程序运行速度,你也可以把你一些不必要的子窗口类排除。
更多追问追答
追问
你的第一步就是获取屏幕“所有”窗口句柄,如何获取?获取进程列表再用FindWindow ?
追答
桌面实际上就是一个最顶级的父窗口,用 GetDesktopWindow函数取得其句柄,下面的其他窗口都是其子窗口。。
先用函数取得句柄,再遍历就可以了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-07
展开全部
你传入的第一个参数,hwndParent是null吗?如果是null,那应该不必递归
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-07
展开全部
请参考此贴,必有帮助!http://bbs.csdn.net/topics/380211415
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-03-07
展开全部
Qq那个应该是判断像素吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 5条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式