三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

AutoHotkey V2扩展库ahk2_lib快速上手:10分钟搭建一个智能截图识别工具

AutoHotkey V2扩展库ahk2_lib快速上手:10分钟搭建一个智能截图识别工具

AutoHotkey V2扩展库ahk2_lib快速上手:10分钟搭建一个智能截图识别工具

【免费下载链接】ahk2_lib项目地址: https://gitcode.com/gh_mirrors/ah/ahk2_lib

你是不是也遇到过这种情况:AutoHotkey 脚本写好了自动化流程,可一到"读图片里的文字""算超高精度小数""做个现代界面",就得一头扎进DllCall文档里翻半天?

AutoHotkey V2扩展库 ahk2_lib就是来解决这个问题的。它把 50 多个专业模块打包成一个工具箱,从 Windows API 调用、OCR 文字识别、Excel 读写到 Web 界面、网络服务,全部封装成几行就能调用的函数。它适合所有想从"写脚本"升级到"写应用"的 AHK 用户——不需要懂 C++,不需要翻微软文档,上手就能跑。

一眼看懂:这是不是你要的东西

项目说明
适合谁用有 AutoHotkey 基础、想快速实现系统级或业务级功能的开发者
核心能力OCR 识别、屏幕捕获、Excel/数据库操作、现代界面、网络服务、C++ 性能扩展
上手难度★★☆☆☆(会#Include就能开始)
典型产出自动文档录入工具、系统监控面板、数据报表、自动化测试脚本
环境要求Windows + AutoHotkey V2,各 DLL 均自带 32/64 位版本

三步上车指南:从克隆到跑通第一个识别

第 1 步:获取项目代码

在你自己的项目目录旁边克隆下来即可:

git clone https://gitcode.com/gh_mirrors/ah/ahk2_lib

不需要安装任何依赖,目录结构即模块结构:RapidOcr/WebView2/SQLite/WinAPI/一目了然。

第 2 步:引入你要的模块

写一个空脚本,用#Include引入模块,注意尖括号路径写法:

#Include <ahk2_lib\RapidOcr\RapidOcr> ; OCR 识别 #Include <ahk2_lib\wincapture\wincapture> ; 屏幕捕获

第 3 步:跑通第一个识别

把任意一张带文字的图片放到脚本目录,运行下面这段:

ocr := RapidOcr({ models: A_ScriptDir '\models' }) ; 用项目自带的模型 result := ocr.ocr_from_file('1.jpg') ; 识别图片 MsgBox result.text ; 弹出识别到的文字

看到弹窗里出现图片上的文字,你的第一个 OCR 工具就跑通了。整个过程不到 10 行代码,别慌,就这么简单。😊

核心能力速览:按"省下的时间"看这张能力地图

与其罗列技术名词,不如看每个模块帮你省下了哪类时间:

帮你省下的时间对应模块一句话价值
调 Windows API 的时间WinAPI/Detours/系统调用、注册表、API 拦截全部封装好
写界面 UI 的时间WebView2/XCGUI/CGdip.ahk现代 Web 界面或原生炫彩窗口,拖出来就能用
折腾数据格式的时间JSON.ahkYAML.ahkBase64.ahk解析、转换、序列化一行搞定
处理业务数据的时间SQLite/CSQLite.ahkXL/XL.ahk数据库与 Excel 直接读写,不依赖 Office
造轮子的时间MCode.ahkNative/ctypes.ahk嵌入 C++ 机器码,性能关键处获得原生速度
写网络代码的时间HttpServer.ahkWebSocket.ahkSocket.ahk从 HTTP 请求到实时通信一站配齐
重复截图找字的时间wincapture/RapidOcr/Yolo/opencv/截屏、找色、找图、OCR、目标检测全覆盖

说白了,这套库覆盖了一个 Windows 工具从"采集→识别→处理→存储→展示"的完整链路,你只需要把模块像积木一样拼起来。

一个完整实战:做一个定时"截图识别写 Excel"的小工具

下面把最有代表性的场景完整跑一遍:定时截取屏幕上某个区域的文字,识别后写入 Excel。这正好是"智能文档录入系统"的最小原型。

第 1 步:搭好脚本骨架

#Include <ahk2_lib\RapidOcr\RapidOcr> #Include <ahk2_lib\wincapture\wincapture> #Include <ahk2_lib\XL\XL> ocr := RapidOcr({ models: A_ScriptDir '\models' }) ; 初始化识别器 book := XL.New('xlsx'), sheet := book.addSheet('识别结果') ; 新建 Excel

预期结果:脚本能正常启动,不报错。易错点models路径必须包含det/rec/cls三个 onnx 模型和keys.txt,缺一个就会Throw

第 2 步:初始化屏幕捕获

dxcp := wincapture.DXGI() ; DXGI 桌面复制,速度快

预期结果:拿到一个屏幕捕获对象。易错点:DXGI 每进程只能有一个实例,重复DXGI()会冲突。

第 3 步:截取指定区域

box := Buffer(16, 0) ; 用 16 字节描述区域坐标 NumPut('uint', 0, 'uint', 0, 'uint', 400, 'uint', 200, box) bb := dxcp.captureAndSave(box) ; 截取左上角 400x200 区域 bb.save('capture.png') ; 存成临时图片

预期结果:目录里多出capture.png易错点:坐标超过屏幕范围会返回空,建议先MsgBox A_ScreenWidth确认分辨率。

第 4 步:识别图片文字

param := RapidOcr.OcrParam() param.doAngle := false ; 图片不是倾斜的,可关闭角度检测提速 res := ocr.ocr_from_file('capture.png', param) MsgBox res.text ; 查看识别全文

预期结果:弹出识别出的文字。易错点OcrParam()默认配置适合大多数场景,文字太小可调大box截取区域,别急着调参数。

第 5 步:把结果写进 Excel

lines := StrSplit(res.text, '`n') ; 按行拆分 for i, line in lines sheet['A' i] := line ; 逐行写入 A 列 book.save('result.xlsx') book := '' ; 释放 libxl 资源

预期结果:生成result.xlsx,每行一段识别文字。易错点book := ''这行很重要,libxl 靠对象销毁来保存并释放句柄,忘了写可能导出不完整。

第 6 步:加上定时循环

SetTimer () => CaptureAndSave(), 3000 ; 每 3 秒识别一次 CaptureAndSave() { bb := dxcp.captureAndSave(box) bb.save('capture.png') res := ocr.ocr_from_file('capture.png') sheet['A' (A_Index + 1)] := res.text ; 追加到下一行 }

预期结果:屏幕区域的文字被持续录入 Excel,形成滚动记录。易错点:循环里频繁建表会累积资源,实际使用时可以把book.save挪到定时器外部,最后统一写盘。

第 7 步:收尾释放资源

dxcp.release() ; 释放捕获对象(非必须,但推荐)

到这里,一个"屏幕监控 + 文字识别 + Excel 存储"的完整工具就落地了。同样的思路,把 Excel 换成CSQLite.ahk的数据库,就升级成了带检索能力的文档管理系统。

进阶与避坑

三条进阶玩法

  • 性能不够?MCode/Native/把计算密集的逻辑写成 C++ 编译成机器码嵌入,配合MCodeLoader.ahk直接调用,速度接近原生。参考MCode/example.ahk
  • 界面太土?WebView2/加载本地 HTML,配合HttpServer.ahkWebSocket.ahk做实时推送,就能拼出一个现代化的监控大屏。
  • 想玩系统级?Detours/支持 API 钩子,Native/支持 C++ 深度扩展,配合Yolo/的目标检测,完全可以做出游戏辅助或自动化测试框架。

⚠️ 常见问题

  1. DLL 位数不匹配:所有带 DLL 的模块都分32bit/64bit/,代码里通常用(A_PtrSize * 8) 'bit\'自动选择。如果你手动指定路径,务必和你的 AHK 版本位数一致,否则报"入口点找不到"。
  2. OCR 模型缺失RapidOcr/models/下的四个文件缺一不可。报No value is specified时,优先检查models目录路径和文件名。
  3. 资源没释放:libxl 的book、WebView2 的wvc、DXGI 的dxcp,用完都要置空或调用release()。这类库依赖析构函数回收句柄,忘了释放会越跑越卡。
  4. 异步方法忘了等待:WebView2 的异步方法都带Async后缀并返回 Promise,记得.await2(),直接调用拿不到结果,还会报"对象不支持此属性"。

从一个小工具开始试起来

ahk2_lib 的厉害之处在于:它把"专业开发"的门槛降到了"写脚本"的高度。你不用先学 C++、不用啃 API 文档,从今天起就可以用它把脑子里的想法一个个变成能用的工具。

行动建议:别贪多,先选一个你最关心的痛点——比如"把截图里的文字自动存成表格"——照着上面的实战走一遍。跑通的那一刻,你会发现 AutoHotkey V2 的能力,远比你想象的宽广。🚀

【免费下载链接】ahk2_lib项目地址: https://gitcode.com/gh_mirrors/ah/ahk2_lib

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表