窗口后台指定区域截图工具例程

易语言 2020-07-05 11:13:22

一、功能简介
1.支持前台和伪后台截图。
2.支持指定区域截图,手动画区域或手动输入坐标
3.支持截图结果多格式保存
4.支持自定义截图热键
5.支持连续截图和定时截图
6.支持自定义配合键盘鼠标截图(类似脚本功能)
GetWindowRect (窗口句柄, 矩形区域)
屏幕设备上下文句柄 = GetDC (0)
内存设备上下文句柄 = CreateCompatibleDC (屏幕设备上下文句柄)
位图句柄 = CreateCompatibleBitmap (屏幕设备上下文句柄, 矩形区域.right - 矩形区域.left, 矩形区域.bottom - 矩形区域.top)
旧位图句柄 = SelectObject (内存设备上下文句柄, 位图句柄)
.如果真 (取反 (PrintWindow (窗口句柄, 内存设备上下文句柄, 0)))
SelectObject (内存设备上下文句柄, 旧位图句柄)
DeleteObject (位图句柄)
DeleteDC (内存设备上下文句柄)
ReleaseDC (0, 屏幕设备上下文句柄)
返回 ({ })
.如果真结束
.如果真 (是否为空 (rc) = 假)
hmemdc = CreateCompatibleDC (屏幕设备上下文句柄)
hbitmap = CreateCompatibleBitmap (屏幕设备上下文句柄, rc.right - rc.left, rc.bottom - rc.top)
holdbitmap = SelectObject (hmemdc, hbitmap)
BitBlt (hmemdc, 0, 0, rc.right - rc.left, rc.bottom - rc.top, 内存设备上下文句柄, rc.left, rc.top, 13369376)
SelectObject (内存设备上下文句柄, 旧位图句柄)
DeleteObject (位图句柄)
DeleteDC (内存设备上下文句柄)
内存设备上下文句柄 = hmemdc
位图句柄 = hbitmap
旧位图句柄 = holdbitmap
.如果真结束

GetObjectA (位图句柄, 5 × 4 + 2 + 2, 位图)
位图信息.BITMAPINFOHEADER.biSize = 4 × 11
GetDIBits_BimapInfo (内存设备上下文句柄, 位图句柄, 0, 0, 0, 位图信息, 0)
位图像素点阵 = 取空白字节集 (位图信息.BITMAPINFOHEADER.biSizeImage)
位图信息.BITMAPINFOHEADER.biCompression = 0
GetDIBits (内存设备上下文句柄, 位图句柄, 0, 位图.bmHeight, 位图像素点阵, 位图信息, 0)
' 构造位图信息
位图信息字节集 = 取空白字节集 (位图信息.BITMAPINFOHEADER.biSize)
CopyMemory_BITMAPINFO (位图信息字节集, 位图信息, 位图信息.BITMAPINFOHEADER.biSize)
' 构造位图文件头
位图文件头.bfType = 19778
位图文件头.bfOffBits = 2 × 4 + 3 × 2 + 位图信息.BITMAPINFOHEADER.biSize
位图文件头.bfSize = 位图文件头.bfOffBits + 位图信息.BITMAPINFOHEADER.biSizeImage
位图文件头.bfReserved1 = 0
位图文件头.bfReserved2 = 0
位图文件头字节集 = 取空白字节集 (14)
CopyMemory_BITMAPFILEHEADER (位图文件头字节集, 位图文件头, 14)
SelectObject (内存设备上下文句柄, 旧位图句柄)
DeleteObject (位图句柄)
DeleteDC (内存设备上下文句柄)
ReleaseDC (0, 屏幕设备上下文句柄)
返回 (位图文件头字节集 + 位图信息字节集 + 位图像素点阵)