手把手教你写截图软件!

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

手把手教你写截图软件!

其实写这个程序是受到尘封同学的启发,他写了个窗口截图程序,可是问题在于只能截窗口,似乎和我们常用的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.拖放矩形时如果选择了一点拖,就只能往这一点的斜下方拖(因为我预先把起点保存在

Rect.top和Rect.left,也就是规定了起点是左上角)

4.不能截视频(以为截图原理不一样,你用QQ也是不能截的)

写完这个程序我突然想到了点事情,有时候一个有用有趣的软件,并不需要太多高深的技术(我这话不是否认算法的重要性),他有时候需要的是一种创意。你说QQ截图给我们日常生活中带来多少欢乐,多少便利!但是说到底,也就是那么几个GDI函数?我们不是科学家,我们所做的也许更多在于方便用户,所以观众身边人,关注他们需要什么,也许灵感就会降落在你头上!想想“搜狗拼音”,其实技术早就存在了,只是没人应用到这打字上来,但是终归有人是有心人,做了尝试(据说这人一开始到百度遭拒,后来被搜狐相中),后来搜

狗就像那一夜春风,千树万树梨花开

至于细节下次再说吧,看看效果:

感谢你提出问题,不过你指的不可以截图是截图没反应还是点击截图然后死机

我测试了八台XP电脑,运行的很流畅,多次截图也成功,然后又测试了四台Vista电脑,其中三台运行良好(但没有xp好),另外一台就死机了(至于为什么我也不知道)

先确认下你操作无误!

你点击截图选项后,若立马点击鼠标右键,则退出截图

要想截图,必须点击截图选项后,点击鼠标左键(保持不放),然后拖动鼠标来截图

首先我要声明,当时我写这个程序的时候用的是WIN32汇编,不是c语言(这也是为什么我不贴代码的原因),但是在下面的叙述中,为了方便大家学习,我采用c语言描述,里面也许会出现语法问题(本人未用过c写windows程序),希望大家不要在意这些,抓住整体,

把握主要思路就行了谢谢!

创建程序的主窗口如下图所示:

1.在注册主程序窗口类时我们要做下面一件事

;****************************************************************************** *********************

;创建位图画刷(主要是为了美观)

;****************************************************************************** *********************

hPatternBrush = CreatePatternBrush(LoadBitmap,hInstance,IDB_BACK) stWndClass.hbrBackground = hPatternBrush

2.在这个主窗口的WM_CREATE消息中,我们要做一下几件事情:

;****************************************************************************** *********************

;获得屏幕大小

相关文档
最新文档