此文部分知识点相关文章:
此文在使用 MouseHook的基础上加了一个鼠标点击程序 获取截图的功能,所有要先看看上面的两篇文章比较好 . . .
话不多说先来看一下程序的效果如何:
运行程序,点击 Vs 自动获取截图,并在画图软件中显示出来,也可以到当前目录中查看图片 . . .
.
要想写出截图的代码,我们需要学习九个 Win32 Api
,他们分别是:
其中有两两Api 是对应的,比如获取句柄 对应 释放句柄,所以我们还是比较容易理解这九个 Api 的使用 . . .
.
Win32 Api 的描述与功能
1. PrintWindow: 2. SelectObject: 3. CreateCompatibleDC: 4. DeleteDC:5. CreateCompatibleBitmap: 6. DeleteObject: 7. GetWindowRect: 8. GetWindowDC: 9. ReleaseDC:
程序实现
-
首先,我们一个名为
CaptrueImage
的类,他有一个方法用于返回截取的 Bitmap(位图)
:
-
在这个类中 导入 Win32 Api:
.
. 实现 Captuer 方法,返回位图:
- 判断是否有进程存在,没有则返回方法:
if (process == null) return null;
-
获取设备上下文:
-
获取指定窗口边界的尺寸:GetWindowRect
-
计算窗口大小:
-
创建一个设备上下文相关的位图,CreateCompatibleBitmap -> DeleteObject
-
创建一个内存上下文兼容的句柄,CreateCompatibleDC -> DeleteDC
-
选择一个设备上下文对象:SelectObject
-
拷贝窗口到设备上下文,PrintWindow
-
从位图句柄中创建 Bitmap:
-
清理垃圾,并返回位图:
.
. 修改鼠标钩子左键按下操作:
上面好像少了什么东西,多了一个事件触发语句,这相当于什么呢?
相当于下面这个东西:
只不过对 MouseHook 修整了一下而已 . . .
如果我们不想截取一整个进程的图片,只想截取部分图片怎么办呢?
我们只需要借助 Graphics 类来实现即可:
例如下的操作:
先定义一个 Bitmap对象,用于存取截的图,定义 Graphics对象 关联到 Bitmap对象,使用 DrawImage开始指定大小截图,最后保存即可,效果如下所示:
如果我们在加一点算法,就可以获取各种各样进程中的指定图片了,是不是很有趣呢?
.
程序完事源码可访问: