经常需要从微信聊天接收别人发的视频,好几十个下载原视频的话需要点击很多次,一开始用Quicker录制动作,但是每个视频下载时间不一样,把等待时间都拉很大的话,有点慢。
昨天求助Gemini帮我写了一个AHK V2的脚本,设置了监视区域,下好了就保存。
使用的话,需要修改一下自己程序的定位信息。
#Requires AutoHotkey v2.0
; --- 脚本启动时,弹出一个输入框,让用户输入重复执行的次数 ---
InputBoxObj := InputBox("请输入所有步骤需要重复执行的次数:", "设置重复次数", "w300 h150")
if (InputBoxObj.Result = "Cancel")
ExitApp
LoopCount := InputBoxObj.Value
if !IsInteger(LoopCount) or (LoopCount <= 0)
{
MsgBox "请输入一个有效的正整数!"
ExitApp
}
; =======================【请在这里填写您侦察到的信息】=======================
; --- 1. 定义两个目标窗口的标识符 (推荐使用 ahk_class) ---
WindowA_ID := "ahk_class Qt51514QWindowIcon" ; 执行步骤 1, 2, 3, 5 的窗口
WindowB_ID := "ahk_class #32770" ; 执行步骤 4 的窗口
; --- 2. 定义所有操作点的【相对坐标】(使用独立的X,Y变量) ---
; -- 窗口 A 的坐标 --
Click1_X_A := 1022, Click1_Y_A := 31 ; 步骤1: 窗口A内的点击坐标
; -- 【新】步骤 2: 定义颜色搜索区域和参数 --
Search_X1_A := 1025, Search_Y1_A := 16 ; <--- 请替换为搜索区域的【左上角】坐标
Search_X2_A := 1098, Search_Y2_A := 37 ; <--- 请替换为搜索区域的【右下角】坐标
TargetColor := 0x9E9E9E ; 要寻找的颜色
ColorVariation := 10 ; 颜色容差 (0-255),允许颜色有细微差别,增加稳定性
Click2_X_A := 422, Click2_Y_A := 41 ; 步骤3: 窗口A内的点击坐标
Click4_X_A := 1490, Click4_Y_A := 1035 ; 步骤5: 窗口A内的点击坐标
; -- 窗口 B 的坐标 --
Click3_X_B := 1582, Click3_Y_B := 937 ; 步骤4: 窗口B内的点击坐标
; ===========================================================================
; --- 开始主循环 ---
Loop LoopCount
{
; --- 激活窗口 A ---
if !ActivateWindow(WindowA_ID, "窗口 A")
ExitApp
; 步骤 1
ToolTip "第 " A_Index " 次循环:准备点击窗口 A..."
Click(Click1_X_A, Click1_Y_A)
ToolTip "第 " A_Index " 次循环:已在窗口A内点击 (" Click1_X_A ", " Click1_Y_A ")"
Sleep 1000
; 步骤 2: 【已更新】在指定区域内搜索特定颜色
ToolTip "第 " A_Index " 次循环:正在窗口A的指定区域内搜索颜色..."
; 当 PixelSearch 找不到颜色时,它返回 False。循环会一直执行直到找到颜色。
while !PixelSearch(&FoundX, &FoundY, Search_X1_A, Search_Y1_A, Search_X2_A, Search_Y2_A, TargetColor, ColorVariation)
{
ToolTip "第 " A_Index " 次循环:区域内未发现目标颜色,1秒后重试..."
Sleep 1000
; 额外检查:如果此时窗口A不存在了,就没必要继续等了
if !WinExist(WindowA_ID)
{
MsgBox "等待期间,窗口 A 消失了。脚本停止。"
ExitApp
}
}
ToolTip "第 " A_Index " 次循环:在区域内找到颜色!"
Sleep 1000
; 步骤 3
Click(Click2_X_A, Click2_Y_A)
ToolTip "第 " A_Index " 次循环:已在窗口A内点击 (" Click2_X_A ", " Click2_Y_A ")"
Sleep 1000
; --- 激活窗口 B ---
if !ActivateWindow(WindowB_ID, "窗口 B")
ExitApp
; 步骤 4
ToolTip "第 " A_Index " 次循环:准备点击窗口 B..."
Click(Click3_X_B, Click3_Y_B)
ToolTip "第 " A_Index " 次循环:已在窗口B内点击 (" Click3_X_B ", " Click3_Y_B ")"
Sleep 1000
; --- 再次激活窗口 A ---
if !ActivateWindow(WindowA_ID, "窗口 A")
ExitApp
; 步骤 5
ToolTip "第 " A_Index " 次循环:准备点击窗口 A..."
Click(Click4_X_A, Click4_Y_A)
ToolTip "第 " A_Index " 次循环:已在窗口A内点击 (" Click4_X_A ", " Click4_Y_A ")"
Sleep 1000
}
MsgBox "脚本执行完毕!"
ExitApp
; --- 自定义函数:激活窗口并检查是否存在 ---
ActivateWindow(WinID, WinName)
{
if WinExist(WinID)
{
WinActivate(WinID)
Sleep 300
return true
}
else
{
MsgBox "错误:找不到 " WinName "!脚本已停止。`n请检查标识符:`n" WinID
return false
}
}
; --- 自定义函数:检查是否为整数 ---
IsInteger(value)
{
return RegExMatch(value, "^\d+$")
}