c#高仿截图程序,自动捕获窗口的原理是什么?
写好几天了,我是将罩面窗体Enabled设为false再用ChildWindowFromPointEx过滤掉罩面递归寻找下面的窗口句柄,鼠标移动就不断的调用这个递归函数,...
写好几天了,我是将罩面窗体Enabled设为false再用ChildWindowFromPointEx过滤掉罩面递归寻找下面的窗口句柄,鼠标移动就不断的调用这个递归函数,发现鼠标指针很卡,跟QQ截图的速度没法比,我想知道QQ截图自动捕获窗口的原理是什么?
http://pan.baidu.com/s/1o6CvIh8这是我写的截图程序画板部分还没写,看看自动捕获窗口时鼠标指针很卡的样子 展开
http://pan.baidu.com/s/1o6CvIh8这是我写的截图程序画板部分还没写,看看自动捕获窗口时鼠标指针很卡的样子 展开
7个回答
2014-03-07
展开全部
理论上不应该卡。第一我怀疑是重绘的问题,因为即使Disable掉还是会重绘的。第二也许你将抓子窗体的代码写在鼠标移动事件中,这会触发很多次的。想不卡就单跑线程去抓,不要影响UI。你可以学一下QQ,截图时自己先建一个全屏大的窗体放在顶端,背景使用全屏截图。抓子窗体句柄时忽略自己这个就好。可以一试。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-03-07
展开全部
alt +截屏幕键
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用GetWindowRec API函数。而不是用你这个函数,先用它获取整个窗口控件,会返回一个RECT值,这样便能完成捕获窗口,再直接传给画板就OK
步骤应该是这样-获取屏幕所有窗口句柄,先取得CLASSFORM STATTOOLBAR这两种类型窗口的RECT--获取鼠标当前所在位置X,Y----判断和取得鼠标所在窗口的句柄----继续判断和取得鼠标所在窗口的子窗口句柄-----获取子窗口RECT--高亮显示当前窗口(可以在屏幕画一个框,以表示捕获完成)。
看了QQ截图,好像不能直接截取某个按钮,估计是被过滤了,这样能加快程序运行速度,你也可以把你一些不必要的子窗口类排除。
步骤应该是这样-获取屏幕所有窗口句柄,先取得CLASSFORM STATTOOLBAR这两种类型窗口的RECT--获取鼠标当前所在位置X,Y----判断和取得鼠标所在窗口的句柄----继续判断和取得鼠标所在窗口的子窗口句柄-----获取子窗口RECT--高亮显示当前窗口(可以在屏幕画一个框,以表示捕获完成)。
看了QQ截图,好像不能直接截取某个按钮,估计是被过滤了,这样能加快程序运行速度,你也可以把你一些不必要的子窗口类排除。
更多追问追答
追问
你的第一步就是获取屏幕“所有”窗口句柄,如何获取?获取进程列表再用FindWindow ?
追答
桌面实际上就是一个最顶级的父窗口,用 GetDesktopWindow函数取得其句柄,下面的其他窗口都是其子窗口。。
先用函数取得句柄,再遍历就可以了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-03-07
展开全部
你传入的第一个参数,hwndParent是null吗?如果是null,那应该不必递归
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-03-07
展开全部
Qq那个应该是判断像素吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询