某网页单据打印辅助AutoHotkey脚本-v2.0-2025-04-03
/*
;================= 标题 开始 =================
某网页单据打印辅助AutoHotkey脚本-v2.0-2025-04-03
;================= 标题 结束 =================
*/
/*
;================= 前言 开始 =================
; 某网页单据打印辅助AutoHotkey v1.0脚本,本来打印单据需要用鼠标点击多次,
; 运行此脚本之后只需在输入完毕后按快捷键热键<F4>
; 为了便于寻找快捷键位置,我在F4键的键帽上贴了黄色贴纸
; 可用 AHKInfo 1.3.5 或者 AhkSpy 等窗口信息探测工具来获取鼠标光标的当前位置
; 2025-03-31
; 由于"【函数】FindText中文版- 屏幕抓字生成字库工具与找字函数"比较复杂,创建和使用脚本麻烦
; 所以我使用 MouseMove、Click和Sleep这3个AHK原生语句来制作此脚本,
; 这3个内置函数语句的优点是性能速度快,效率高,稳定可靠(有时候FindText在不同电脑上会找不到位图),
; 这3个内置函数语句的缺点是环境适应性差,不同显示器,不同显卡,不同电脑,不同分辨率下的全局坐标可能会不同,需要重写代码.
; 这3个内置函数语句的缺点是需要窗口最大化,窗口位置固定,否则有可能点击不到网页中的按钮.
; 我这边网页平台系统只要多次鼠标点击写到1个快捷键热键就可以了,只要能够长期稳定使用就可以了,要求不高.
; 所以我也不想再根据屏幕分辨率 DPI 缩放修正通用全局坐标了,不折腾了,只要一个电脑上能用就好了,
; 并且我这个Windows 10 企业版 LTSC 电脑用Acronis True Image 2021 在USM v5下备份了系统分区,
; 并且正确安装设置了Deep Freeze Standard冰点还原精灵保护电脑第1分区系统分区C盘.
; 2025-04-03 彻底重新编写源代码,用FeiYue大师的FindText()函数和Loop循环语句来多次屏幕找图,
; 提高脚本的稳定性和效率,省去了多余的等待时间,本来的sleep是盲目等待,
; 现在重写源代码之后,尝试找图循环的时间粒度改小为10毫秒 ( Sleep,10 ),减少了各操作之间的无效等待时间。
; 并且,对于某些可变的找图改成查找固定图片的坐标位置并加入偏移量计算公式来换算到真正的目标位置
; 并且新增了各操作步骤的总目录,从而对各操作一目了然,胸有成竹,对于此脚本的整体调试和各个分支步骤的调试有很大好处。
; 当网页窗口中某个按钮控件无法被点击到时,有可能是因为识别的Text内容错或者Loop循环的时间太短,可以用FindText() “截屏抓图” 并适当增加Loop循环次数
此脚本的调试步骤如下:
调试第1步:用SciTE4AutoHotkey打开此脚本的源代码
调试第2步:按快捷键 Ctrl + F5 结束此脚本的运行
调试第3步:用/* */或者Ctrl + Q 注释掉无关当前调试主题内容的代码块,有针对性的调试部分代码,防止代码之间互相影响,聚焦专注于当前调试的源代码片段内容
调试第4步:用AHKInfo 1.3.5 或者 AhkSpyCN 或者 AutoScriptWriter II 等工具抓取嗅探检测到各项信息并修改此脚本的源代码
调试第5步:在SciTE4AutoHotkey窗口中按快捷键F5运行此脚本
调试第6步:观察变量查看器窗口的内容并用代码检测或者用肉眼观察运行结果,根据运行结果决定是否需要进行进一步的调试,需要调试时执行 调试第1步
; xx=% "x" 397*A_ScreenDPI//96
; yy=" y" 63*A_ScreenDPI//96
; MouseMove,xx,yy
;;;;;;;点击窗口内指定坐标 【DPI缩放通用坐标修正】
; ControlClick, % "x" 397*A_ScreenDPI//96 " y" 63*A_ScreenDPI//96, D:\APP\F4\F4.ahk * SciTE4AutoHotkey ahk_class SciTEWindow
; FindText 深度教程 v1.2
; https://www.autoahk.com/archives/41636
; https://www.autoahk.com/archives/47248
; https://www.autoahk.com/archives/39249
; https://www.autoahk.com/archives/28493
;================= 前言 结束 =================
*/
;===========================================
; FindText - 屏幕抓字生成字库工具与找字函数
; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=17834
;
; 脚本作者 : FeiYue
; 最新版本 : 10.0
; 更新时间 : 2024-10-06
;===========================================
; #Include <FindText> ; Lib目录中必须有FindText.ahk
#Include %A_ScriptDir%\FindText.ahk ; 此脚本目录中必须有FindText.ahk
; 设置每次鼠标移动或点击后自动的延时.
SetMouseDelay,0
SetKeyDelay,0
SetControlDelay,0
SetWinDelay,0
; 把 Click, MouseMove, MouseClick 放置在绝对的屏幕坐标上.
CoordMode, Mouse, Screen
; 设置脚本可以 "看见" 隐藏的窗口.
DetectHiddenWindows, On
; 按快捷键 Ctrl + F5 立即退出此脚本
Hotkey,^F5,ExitPrintHMF
Hotkey,F4,PrintHMF
return
ExitPrintHMF()
{
ExitApp
}
PrintHMF()
{
/*
;================= 操作步骤 总目录 开始 =================
;第1步:点击 提交保存网页按钮
;第2步:点击 打印预览网页按钮
;第3步:点击 打印网页按钮
;第4步:点击 确定对话框按钮
;第5步:点击 关闭网页按钮
;第6步:点击 取消网页按钮
;第7步:点击 收费方式网页下拉列表单选框
;第8步:点击 微信
;第9步:点击 位置/姓名 搜索框网页控件
;第10步:发送 Ctrl + A 全选搜索框中原有的内容,为下一次筛选搜索过滤记录行做好输入准备。
#Include <FindText>
t1:=A_TickCount, Text:=X:=Y:=""
Text:=X:=Y:=""
;================= 操作步骤 总目录 结束 =================
*/
; 第1步:点击"提交保存" 网页中的按钮
loop,3
{
Sleep,10
Text:=X:=Y:=""
Text:="|<>*178$56.r0Tnzc1yzxrbyzmyTDw0100AjY00rSTSzPtxzwE7bba0S06DzlsFgbDl409AoTDntxyztDo0803NUz7xsQDjqPzVzQ3nvx0zX7qGQyw707yAQnADU"
if (ok:=FindText(OutputX,OutputY, 1030-150000, 1008-150000, 1030+150000, 1008+150000, 0, 0, Text))
{
; MouseMove,ok[1][1]+ok[1][3]/2,ok[1][2]+ok[1][4]/2
; ok[1].x <==> ok[1][1]+ok[1][3]/2 <==> OutputX(找到图像中心的 X 坐标),
; ok[1].y <==> ok[1][2]+ok[1][4]/2 <==> OutputY(找到图像中心的 Y坐标 ),
; MouseMove,X,Y
; FindText().Click(X, Y, "R")
MouseMove,ok[1].x,ok[1].y
FindText().Click(OutputX,OutputY, "L")
break
}
}
; 第2步:点击"打印预览" 提示对话框按钮
loop,10
{
Sleep,10
Text:=X:=Y:=""
; Text:="|<>*182$57.vzz00004bzM03CSQwY10Qttm7bY3zTbDCMU4U7vws1k0wzyT3bDCM4a07lwttn0YnwsTbDCNYaNbvwtVnAYn4zTb10tsTkwvwttzC9sbAQ7zDV7UQ1U"
Text:="|<>*191$88.Tzzzzzzzzzzzzzvzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzjzw0800HTzzzzzyk06Qwtt83zzzzzUSttn7bYXzzzzzzjvbbCM2EXzzzzzyzi0QUDDzbzzzzzsSttncok0zzzzzz7vbbC/HDvzzzzzsziSQvhAnjzzzzzvytVniYn6zzzzzzjvUUSyDwSTzzzzyziSTvWT9vzzzzzXUzty8y3kDzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzrzzzzzzzzzzzzzyU"
if (ok:=FindText(X, Y, 1068-150000, 688-150000, 1068+150000, 688+150000, 0, 0, Text))
{
MouseMove,X,Y
FindText().Click(X, Y, "L")
break
}
}
WinWaitActive,打印预览,,5
Sleep,500
; 第3步:点击"打印" 预览网页中的图标按钮
loop,20
{
Sleep,10
Text:=X:=Y:=""
Text:="|<>*133$16.1zk810jc40ULrW0JTyi05TztU0e03jzuE1Ezy000000067vX28+8UUXu28+8UUW+2/88kUU2C0+"
if (ok:=FindText(X, Y, 457-150000, 41-150000, 457+150000, 41+150000, 0, 0, Text))
{
MouseMove,X,Y
FindText().Click(X, Y, "L")
break
}
}
; 第4步:点击"确定" 打印对话框按钮
loop,3
{
Sleep,10
Text:=X:=Y:=""
Text:="|<>*149$70.Dzzzzzzzzzzl00000000000c00000000001U000104000060007bU80000M0004WTz0001U000EF0400060002Dk00000M000CdTz0001U001fw2000060002eF80000M000+z4y0001U000uYG000060002eGc0000M00013Fz0001U0000000000600000000000I00000000002Dzzzzzzzzzzm"
if (ok:=FindText(X, Y, 1091-150000, 537-150000, 1091+150000, 537+150000, 0, 0, Text))
{
MouseMove,X,Y
FindText().Click(X, Y, "L")
break
}
}
Sleep,500
WinWaitActive,打印预览,,5
Sleep,500
; 第5步:点击"关闭" 预览网页中的图标按钮
loop,3
{
Sleep,10
Text:=X:=Y:=""
Text:="|<>*143$23.0y002200Dzy0E040V08170E2T0U48108E20EzY0U08100E3zzU000000000002240284z0002zsV4412882zTzY8UU8l2UGW8Ud4UV6C0m1s"
if (ok:=FindText(X, Y, 496-150000, 41-150000, 496+150000, 41+150000, 0, 0, Text))
{
MouseMove,X,Y
FindText().Click(X, Y, "L")
break
}
}
; 第6步:点击"取消" 成功提示对话框按钮
loop,3
{
Sleep,10
Text:=X:=Y:=""
; Text:="|<>*183$27.zU8aGTsqmHF2KXu97zHFAUPvMo3H+0zuNkY3LY4zzNlY33nAUMQB4SU"
Text:="|<>*174$27.zU8W2DsqGFF2GXu97zFFAUPt8o3F+0zu9kY3LY4zz9kY31HAUMA54CU"
if (ok:=FindText(X, Y, 1152-150000, 688-150000, 1152+150000, 688+150000, 0, 0, Text))
{
MouseMove,X,Y
FindText().Click(X, Y, "L")
break
}
}
; 第X步:点击"确定" 错误提示对话框中的按钮
loop,3
{
Sleep,10
Text:=X:=Y:=""
Text:="|<>*192$60.TzzzzzzzzyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyTzDzzzzzw03zDzzzzzz9nU0TzzzzzM0jzTzzzzz4YzzzzzzzyI000DzzzzyIYzjzzzzzwIYvjzzzzzzE0nUTzzzzz1YnjzzzzzzNYUjzzzzzzvUC0DzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzTzzzzzzzzyU"
if (ok:=FindText(X,Y, 1030-150000, 1008-150000, 1030+150000, 1008+150000, 0, 0, Text))
{
; MouseMove,ok[1][1]+ok[1][3]/2,ok[1][2]+ok[1][4]/2
; ok[1].x <==> ok[1][1]+ok[1][3]/2 <==> OutputX(找到图像中心的 X 坐标),
; ok[1].y <==> ok[1][2]+ok[1][4]/2 <==> OutputY(找到图像中心的 Y坐标 ),
; MouseMove,X,Y
; FindText().Click(X, Y, "R")
MouseMove,ok[1].x,ok[1].y
FindText().Click(X,Y, "L")
break
}
}
; 第7步:点击"收费方式下拉列表单选框" 收费方式下拉列表单选框,由于下拉列表选项内容有可能会不同变化,所以此处
loop,3
{
Sleep,10
Text:=X:=Y:=""
Text:="|<>*190$64.2M0G0300/0090TzU400a04jw4Wzzzzw0GV7zs80080BD4F80U00U0oolzy3z7u00GG0W88A6801tcDzVUkMk0AXXkA431V402A3AkkA64kA/g1w60UT+0ksBsCkyD0M0U"
if (ok:=FindText(X, Y, 342-150000, 478-150000, 342+150000, 478+150000, 0, 0, Text))
{
MouseMove,X+150,Y
FindText().Click(X+150, Y, "L")
break
}
}
Sleep,500
; 第8步:点击"微信" 收费方式下拉列表单选框选项
loop,3
{
Sleep,10
Text:=X:=Y:=""
; Text:="|<>*189$28.4W120ec7zoywU0Q6aTsjuM061ebyPnW03hA9zWYEY2+P2E8dO9zX14Y2U"
Text:="|<>*188$64.2M0G0UkTzU090TzWzw4U04jw4WyH7zs0GV7zsbyN8UBD4F82H9YW0oolzyDzbzs0GG0W9om1001tcDzeLfzz0AXXkA9GV1U02A3AkZu7g0A/g1w2E87k0ksBsCt3bks0U"
if (ok:=FindText(X, Y, 415-150000, 604-150000, 415+150000, 604+150000, 0, 0, Text))
{
MouseMove,X+150,Y-15
; 在当前位置上左右移动鼠标光标,提示引起注意
SetMouseDelay,10
loop,3
{
MouseMove,X+150+50,Y-15
Sleep,150
MouseMove,X+150-50,Y-15
}
SetMouseDelay,0
FindText().Click(X+150,Y-15, "L")
break
}
}
; 第9步:点击"位置" 搜索输入框
loop,3
{
Sleep,10
Text:=X:=Y:=""
Text:="|<>*185$64.14080EUTzU1zz0E111YW00F1zy/zrzs0Dz408U00E0AU4F8aENzz0nzkAUMV0400810V2W4Dz01zy2428kU401ZUE88G3zk0vzX0kV8810A10M1W10U40rzv03/zzzw0U"
if (ok:=FindText(X, Y, 342-150000, 238-150000, 342+150000, 238+150000, 0, 0, Text))
{
MouseMove,X+150,Y
FindText().Click(X+150, Y, "L")
break
}
}
; 第10步:发送 Ctrl + A 模拟按键动作到 "位置"搜索输入框
Sleep,5
Send,^a
Sleep,5
}
return
https://www.autoahk.com/archives/52264
https://www.cnblogs.com/delphixx/p/18807118
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。