类对象支持库(不是扁平命令)。路径:支持库 → 扩展类库 → 截图类。
类型名必须写完整「截图类」。声明时自动创建,一般无需再调 创建截图()。
与基础库扁平命令 区域截图() 的区别:本类支持 框选、按窗口、含光标、多显示器、PNG/JPEG,并可用 置隐藏本进程 避免把自己拍进去。
硬约束
- 类型名必须写「截图类」。
- 返回值为图像字节集(默认 PNG),可直接
图片_写文件/图片框.图片/图片_写剪贴板。 框选()须在界面线程调用。遮罩只负责拉框/移动/拉伸,不绘制确定/取消。无自定义工具窗时:Enter/双击确认,Esc/右键取消。自定义按钮见开始框选。- 受保护的全屏游戏 / DRM 画面可能是黑屏;UAC 安全桌面截不到。
快速开始
截图类 shot
shot.置含光标(真)
字节集 图 = shot.全屏()
如果 (图片_是否有效(图) == 假) {
输出(shot.取错误())
} 否则 {
shot.保存("桌面.png")
}
框选。不要把主窗口整窗当成工具窗。另做空白小窗,放自己的按钮(或绘制类,注意绘制叠层会盖住控件):
载入(框选工具条)
框选工具条.可见 = 假
shot.置隐藏本进程(真)
shot.置框选工具窗口(框选工具条.句柄)
shot.开始框选()
拉完选区后可用定时器把工具条设为可见(与 C++ 显示同步,避免 可见=假 把窗又藏回去):
函数 刷工具条可见 () {
如果 (shot.是否已选区()) {
框选工具条.可见 = 真
} 否则 {
框选工具条.可见 = 假
}
}
绘制类 g_条画
函数 框选工具条.绘制 () {
g_条画.绑窗口(框选工具条)
g_条画.置填充("#FF007ACC")
g_条画.画圆角矩形(8, 8, 90, 32, 4)
g_条画.置填充("#FFFFFFFF")
g_条画.画文本(34, 16, "确定")
}
函数 框选工具条.单击 (整数 x, 整数 y) {
如果 (x >= 8 && x < 98 && y >= 8 && y < 40) {
字节集 图 = shot.确认框选()
框选工具条.可见 = 假
}
}
绘制类叠层本身不能点选,要点击请写窗口 单击 做命中。拉框过程中工具条保持隐藏,松开选区后由运行时显示并贴在选区附近。
阻塞式(无自定义按钮、用手势确认):
字节集 图 = shot.框选()
延时截菜单:
字节集 图 = shot.延时框选(3000)
窗口:
整数 hwnd = 取前台窗口()
字节集 图 = shot.窗口(hwnd)
字节集 客户区 = shot.窗口(hwnd, 真)
截图类/创建
创建截图
- 签名:
截图类 创建截图() - 说明:一般直接写「截图类 shot」。
截图类/方法
全屏
- 签名:
字节集 全屏() - 说明:截取整个虚拟桌面(多显示器拼在一起)。
显示器
- 签名:
字节集 显示器([整数 索引=0]) - 说明:截取指定显示器。索引从 0 起。
区域
- 签名:
字节集 区域(整数 X, 整数 Y, 整数 宽度, 整数 高度) - 说明:按屏幕坐标截矩形。宽/高 ≤0 时用虚拟屏尺寸。
窗口
- 签名:
字节集 窗口([整数 句柄=0], [逻辑 客户区=假]) - 说明:句柄省略或 0 为前台窗口;客户区=真 则不含边框。被挡住的窗口尽量用 PrintWindow,失败则回退 BitBlt。
框选
- 签名:
字节集 框选() - 说明:阻塞。冻结桌面后单击窗口或拖动拉框,可移动/拉伸。遮罩不画任何按钮。无工具窗时 Enter/双击确认,Esc/右键取消(空字节集,
取错误()为「已取消框选」)。有置框选工具窗口时,可在等待期间点自己的按钮调用确认框选/取消框选。
延时框选
- 签名:
字节集 延时框选([整数 毫秒=1000]) - 说明:先等待再进入阻塞式框选(方便弹出菜单)。不改变
置延时。范围 0~120000。
开始框选
- 签名:
逻辑 开始框选() - 说明:非阻塞,显示遮罩后立即返回。须先把独立小工具条交给
置框选工具窗口(不要传主窗口)。
确认框选 / 取消框选 / 是否框选中 / 是否已选区
- 签名:
字节集 确认框选()·逻辑 取消框选()·逻辑 是否框选中()·逻辑 是否已选区() - 说明:按当前选区出图 / 关闭遮罩 / 查询遮罩是否还在 / 是否已拉出有效选区(此时才应显示自己的确定/取消)。
置框选工具窗口
- 签名:
逻辑 置框选工具窗口([整数 句柄=0]) - 说明:指定小工具条浮在遮罩之上且不被
置隐藏本进程藏起。传主窗口会把整窗置顶,遮罩看起来像沉到窗口下面。0=不指定。
取框选矩形
- 签名:
整数数组 取框选矩形() - 说明:当前选区屏幕坐标:左、上、宽、高。未拉框时四个 0。
框选马赛克
- 签名:
逻辑 框选马赛克([整数 块大小=12]) - 说明:把当前选区在冻结画面上打码。按钮、画笔都由 Y++ 窗口自己做;截完后也可用
图片_马赛克。
复制
- 签名:
逻辑 复制() - 说明:把最近一次成功截图写入剪贴板(位图 DIB;PNG 格式时另附 PNG)。须先截过图。
保存
- 签名:
逻辑 保存(文本 路径) - 说明:把最近一次成功截图按当前
置格式写入文件。
另存为
- 签名:
逻辑 另存为() - 说明:可选系统保存对话框。分发应用若要自绘界面,用
保存文件对话框+保存(路径)。
置延时 / 取延时
- 签名:
逻辑 置延时([整数 毫秒=0])·整数 取延时() - 说明:
全屏/显示器/区域/窗口/框选在截取前等待。配合置隐藏本进程可先藏窗口再等菜单弹出。
置含光标 / 取含光标
- 签名:
逻辑 置含光标([逻辑 含=真])·逻辑 取含光标() - 说明:是否把鼠标指针画进图像。框选时画在松开时的位置。
置隐藏本进程 / 取隐藏本进程
- 签名:
逻辑 置隐藏本进程([逻辑 隐藏=真])·逻辑 取隐藏本进程() - 说明:截取前暂时隐藏本程序窗口,截完再显示。
置框选工具窗口指定的窗口不会被藏。
置格式 / 取格式
- 签名:
逻辑 置格式([文本 格式="png"])·文本 取格式() - 说明:
png(默认)/jpeg/jpg/bmp。
置JPEG质量 / 取JPEG质量
- 签名:
逻辑 置JPEG质量([整数 质量=85])·整数 取JPEG质量() - 说明:仅 JPEG 时生效,范围 1~100。
取显示器数
- 签名:
整数 取显示器数()
取显示器矩形
- 签名:
整数数组 取显示器矩形([整数 索引=0]) - 说明:左、上、宽、高 四个整数。
取最后左边 / 取最后顶边 / 取最后宽度 / 取最后高度 / 取最后矩形
- 说明:最近一次成功截图的屏幕矩形(框选取消不算成功)。
取错误
- 签名:
文本 取错误() - 说明:最近一次失败原因。
和现有命令的关系
| 能力 | 用法 |
|---|---|
| 只要一块矩形、BMP | 基础库 区域截图() 仍可用 |
| 网页内容 | 浏览器控件 .捕获截图(路径) |
| 截完处理 | 图片支持库:水印、缩放、剪贴板 |
| 窗口句柄 | 查找窗口 / 取前台窗口 / 主窗口.句柄 |
截长图(尚未实现)
当前 框选 / 全屏 / 窗口 都是 一次性 GDI 抓当前可见像素。页面里滚出屏幕的内容本来就不在显存里,所以不能靠把选区拉得很高来得到长图。
若以后单独做 长图()(不会塞进现有框选),典型做法是:
- 用户框出窗口内一块「视口」(或指定窗口客户区)。
- 循环:截当前视口 → 向目标窗口发送滚轮/
WM_VSCROLL/PageDown→ 等重绘 → 再截。 - 用相邻两帧重叠条带做对齐(应对滚动条、惯性滚动、未滚满一屏),再纵向拼成一张。
- 停止条件:到底、内容哈希不再变、或达到最大高度。
限制:无障碍滚动的窗口滚不动;网页需焦点在可滚控件上;画布虚拟列表可能重复/漏行;DRM/游戏同样黑屏。这和「录屏」不是同一条能力,也不会做进遮罩里的写死按钮。