C# 之 鼠标点击进程 —— 截取图片

此文部分知识点相关文章:

此文在使用 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:在这里插入图片描述


程序实现

  1. 首先,我们一个名为 CaptrueImage 的类,他有一个方法用于返回截取的 Bitmap(位图)
    在这里插入图片描述

  2. 在这个类中 导入 Win32 Api:
    在这里插入图片描述

.

. 实现 Captuer 方法,返回位图:

  1. 判断是否有进程存在,没有则返回方法:
if (process == null) return null;
  1. 获取设备上下文:
    在这里插入图片描述

  2. 获取指定窗口边界的尺寸:GetWindowRect
    在这里插入图片描述

  3. 计算窗口大小:
    在这里插入图片描述

  4. 创建一个设备上下文相关的位图,CreateCompatibleBitmap -> DeleteObject
    在这里插入图片描述

  5. 创建一个内存上下文兼容的句柄,CreateCompatibleDC -> DeleteDC
    在这里插入图片描述

  6. 选择一个设备上下文对象:SelectObject
    在这里插入图片描述

  7. 拷贝窗口到设备上下文,PrintWindow
    在这里插入图片描述

  8. 从位图句柄中创建 Bitmap:
    在这里插入图片描述

  9. 清理垃圾,并返回位图:
    在这里插入图片描述

.

. 修改鼠标钩子左键按下操作:

在这里插入图片描述

上面好像少了什么东西,多了一个事件触发语句,这相当于什么呢?

相当于下面这个东西:

在这里插入图片描述

只不过对 MouseHook 修整了一下而已 . . .

如果我们不想截取一整个进程的图片,只想截取部分图片怎么办呢?

我们只需要借助 Graphics 类来实现即可:

例如下的操作:

在这里插入图片描述

先定义一个 Bitmap对象,用于存取截的图,定义 Graphics对象 关联到 Bitmap对象,使用 DrawImage开始指定大小截图,最后保存即可,效果如下所示:

在这里插入图片描述

如果我们在加一点算法,就可以获取各种各样进程中的指定图片了,是不是很有趣呢?

.


程序完事源码可访问:

GitHub --> Process-Screenshots

猜你喜欢

转载自blog.csdn.net/weixin_42100963/article/details/106170528