方法1:核心支持库快照 + 窗口裁剪(通用方案)
步骤1:获取目标窗口句柄
窗口句柄 = 取窗口句柄 ("Notepad", "无标题 - 记事本") // 精易模块命令
- 说明:
使用第三方模块(如精易模块)的取窗口句柄
命令,通过窗口标题/类名定位目标窗口。
若无模块,可调用APIFindWindowA
(需声明DLL)。
步骤2:获取窗口位置和大小
左边 = 0 顶边 = 0 宽度 = 0 高度 = 0 窗口_取位置和大小 (窗口句柄, 左边, 顶边, 宽度, 高度) // 精易模块命令
- 关键点:
确保窗口未被最小化,否则获取的尺寸为0。
步骤3:截取全屏并裁剪窗口区域
全屏图片 = 快照 (, , ) // 核心库命令,截取整个屏幕 窗口图片 = 图片_裁剪 (全屏图片, 左边, 顶边, 宽度, 高度) // 精易模块裁剪命令
- 替代方案:
若无需模块,可自行用复制位图
API实现裁剪。
步骤4:保存或显示结果
图片框1.图片 = 窗口图片 // 显示在图片框 写到文件 ("C:\窗口截图.bmp", 窗口图片) // 保存为文件
方法2:扩展界面支持库命令(高效方案)
若已安装扩展界面支持库一(iext.fne
),可直接用专用命令:
窗口图片 = 窗口_快照 (窗口句柄, 假) // 第二个参数:假=截整个窗口,真=仅客户区 图片框1.图片 = 窗口图片
- 优势:
无需裁剪,自动捕获窗口内容(即使被遮挡也能捕获)。 - 注意:
需在易语言IDE中勾选该支持库(工具 → 支持库配置 → 扩展界面支持库一)。
注意事项
- 窗口状态:
窗口必须处于非最小化状态,否则截图可能为黑屏或空白。 - 权限问题:
部分系统窗口(如任务管理器)受权限限制,普通程序无法捕获。 - 多显示器适配:
若使用多屏幕,需先获取窗口所在显示器的坐标偏移量。 - 遮挡处理:
方法1会捕获遮挡内容,建议先窗口_置顶(窗口句柄)
避免干扰。
常见问题解决
- 截图全黑?
检查窗口是否最小化;尝试用窗口_激活(窗口句柄)
前置目标窗口。 - 无法获取句柄?
用工具(如SPY++)确认窗口标题/类名是否匹配,注意隐藏字符。 - 图片保存失败?
易语言默认保存BMP格式,需转换为JPG/PNG时用图片_转换
命令(精易模块)。
引用说明
- 精易模块:本文代码示例依赖精易模块,其封装了常用API操作,提升开发效率。
- 官方支持库:扩展界面支持库一为易语言官方组件,安装包默认包含。
- API参考:底层使用Windows GDI函数(如
BitBlt
),详见Microsoft Docs文档。
提示:优先选择方法2(扩展库命令),代码更简洁高效;若环境受限,方法1配合精易模块可稳定兼容各Windows系统。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7428.html