手把手教你写截图软件!
其实写这个程序是受到尘封同学的启发,他写了个窗口截图程序,可是问题在于只能截窗口,似乎和我们常用的QQ截图不一样,由于我当时在网吧,身上没有U盘,没能拷回去研究,所以如果什么地方说错了敬请尘封同学原谅!
他在留言中给出了一个关键函数,里面首先用到了GetForegroundWindow,我回去查了下MSDN,结果如下:The GetForegroundWindow function returns a handle to the foreground window (the window with which the user is currently working). The system assigns a slightly higher priority to the thread that creates the foreground window than it does to other threads. 通俗的讲就是获取一个当前激活的窗口句柄
Return Values
六年级最后一个六一儿童节祝福语The return value is a handle to the foreground window. The foreground window can be NULL in certain circumstances, such as when a window is losing activation
这里我发现一个问题,也就是函数可能返回null,在某种情况下。所以我想尘封的窗口截图不
一定能每次成功非诚勿扰张丹丹素颜
出于兴趣,我写一个类似QQ的截图程序(当时想了也觉得不怎么难,就是用几个GDI函数),现在就当给初学者点动力(你们完全有能力写),手把手教你们(大牛别笑我!)
首先,先思考截图原理是什么样的? 我做过这样一个实验,我先运行我的笑脸程序,然后启动浏览器的截图功能,这时笑脸静止了,而当取消截图时,笑脸又开始运动了。这说明在截图的过程中整个画面是静止的。
现在的问题是,如何使整个画面静止?方法很简单:先创建一个内存DC保存当前桌面背景,然后创建一个WS_POPUP风格的全屏窗口,并把这个窗口的背景图案设置为先前创建的内存DC。
好了,现在就等于在一个窗口上截图了,这个还不简单?只要记录拖放鼠标的起点位置和终点位置,不就知道要截的是哪块区域了吗? 这里还有个问题,大家记不记得再用QQ截图时,拖放鼠标会出现一个矩形,我们当然也要画一个矩形,这里用DrawFocusRect(具体用法参照MSDN)
接着就是把这个截图区域保存下来,然后让那个全屏窗口自动退出,最后把这个截图显示在我们的窗口中,好了大功告成!
关于我的程序,我有几点想说
西安电脑培训学校
1.菜单项中只有“截图”有效,其他菜单项消息我并没有处理
2.我本来也想保存为图片,但尘封用的那个函数我在MSDN中居然没查到,所以如果你有兴趣可以尝试着做
3.拖放矩形时如果选择了一点拖,就只能往这一点的斜下方拖(因为我预先把起点保存在p和Rect.left,也就是规定了起点是左上角)
4.不能截视频(以为截图原理不一样,你用QQ也是不能截的)
写完这个程序我突然想到了点事情,有时候一个有用有趣的软件,并不需要太多高深的技术(我这话不是否认算法的重要性),他有时候需要的是一种创意。你说QQ截图给我们日常生活中带来多少欢乐,多少便利!但是说到底,也就是那么几个GDI函数? 我们不是科学
家,我们所做的也许更多在于方便用户,所以观众身边人,关注他们需要什么,也许灵感就会降落在你头上! 想想“搜狗拼音”,其实技术早就存在了,只是没人应用到这打字上来,但是终归有人是有心人,做了尝试(据说这人一开始到百度遭拒,后来被搜狐相中),后来搜狗就像那一夜春风,千树万树梨花开
至于细节下次再说吧,看看效果:
1.jpg (23.07 KB)
2009-9-14 15:27
高晓松老婆劈腿
2.jpg (31.74 KB)
2009-9-14 15:27
3.jpg (60.66 KB)
2009-9-14 15:27
感谢你提出问题,不过你指的不可以截图是截图没反应还是点击截图然后死机
我测试了八台XP电脑,运行的很流畅,多次截图也成功,然后又测试了四台Vista电脑,其中三台运行良好(但没有xp好),另外一台就死机了(至于为什么我也不知道)
先确认下你操作无误!
你点击截图选项后,若立马点击鼠标右键,则退出截图
要想截图,必须点击截图选项后,点击鼠标左键(保持不放),然后拖动鼠标来截图
首先我要声明,当时我写这个程序的时候用的是WIN32汇编,不是c语言(这也是为什么我不贴代码的原因),但是在下面的叙述中,为了方便大家学习,我采用c语言描述,里面也许会出现语法问题(本人未用过c写windows程序),希望大家不要在意这些,抓住整体,把握主要思路就行了谢谢!
创建程序的主窗口如下图所示:
1.jpg (23.07 KB)
2009-9-15 10:10
1.在注册主程序窗口类时我们要做下面一件事
;***************************************************************************************************
丝绸之路的路线;创建位图画刷(主要是为了美观)
;***************************************************************************************************
hPatternBrush = CreatePatternBrush(LoadBitmap,hInstance,IDB_BACK)
stWndClass.hbrBackground = hPatternBrush
2.在这个主窗口的WM_CREATE消息中,我们要做一下几件事情:
;***************************************************************************************************
;获得屏幕大小
;***************************************************************************************************
dwWidth = GetSystemMetrics,SM_CXSCREEN  ;屏幕宽   
dwHeight = GetSystemMetrics,SM_CYSCREEN  ;屏幕高
dwCutWidth = WINDOW_SIZE   ;初始化截图宽和高(WINDOW_SIZE)为窗口大小
dwCutHeight = WINDOW_SIZE
;***************************************************************************************************
;创建屏幕背景DC和截图DC
陈慧教育电视台主持人不雅;***************************************************************************************************