屏幕截图的实现和源代码

时间:2021-02-24 15:24:06

最近打算写一些入门相关的小应用程序开发实例,个人感觉学习程序开发,其关键的一步就是阅读源代码(RTFSC,呵呵),然后尝试自己动手编写。这里所谓的自己动手编写并不是让你照着源代码一句话一句的敲,也不是复制粘贴,而是阅读了源代码以后,学习其中的编程思想,然后加以应用,写出自己的程序,你可以在你阅读的源代码上增加功能或优化代码,或者就是在完全不看源代码的情况下,实现相同的功能。如果想学好程序开发,一定要强迫自己做到这样。

 


 

接下来是一个屏幕截图小工具的实例,当初做这个小工具是因为公司不能连接Internet,平时我都是用QQ截图,后来公司没有安装,于是自己编写了一个屏幕截图小工具,也是第一次正式用C++编写应用程序。

 

该程序的流程相当简单:

1.快捷键按下后启动截图功能,这里需要用全局键盘钩子来捕获键盘输入。

2.获取分辨率后,将屏幕截图(原始截图)拷贝到内存当中。

3.拷贝一份屏幕截图,并且转换为灰度图。

4.拷贝灰度图到显示设备当中。

5.获取鼠标选择区域,并绘制矩形框,将原图当中,鼠标框选部分截图拷贝到显示设备当中。

6.获取用户输入,如果是ESC,则重复步骤4,如果是双击或者Enter按下,则将框选部分的原图拷贝的剪贴板中,并释放资源,退出截图。

 

上面的流程便实现了屏幕截图的基础功能,启动截图后,屏幕变为灰色,鼠标选中部分为彩色,然后确定截图,在C++的源代码中,我加入了系统托盘。

 

源代码两个,一个是CPP的实现版本,一个是C#的实现版本。需要VS2008打开。

点击这里下载C#版本。

点击这里下载CPP版本。