每隔10分钟定时关闭并重启夸克网盘电脑客户端,防止下载器卡死宕机死机停止下载的AutoHotkey脚本2024年8月14日
最近在 Microsoft Windows Server 2022 戴尔服务器电脑上下载夸克网盘里的文件夹时发现一个问题,过一段时间后用向日葵控控A2连接服务器发现夸克客户端下载速度为零,夸克网盘界面卡死,于是我用FindText()找图找字函数写了这个脚本,从此又可以愉快的下载文件夹了。
以管理员权限运行此脚本,或者搜索AutoAhk把此脚本改成Admin权限运行
DPI缩放通用坐标修正这个功能非常有用,使得脚本能在不同分辨率和不同电脑硬件环境下正确稳定的运行。
; 每隔10分钟定时关闭并重启夸克网盘电脑客户端,防止下载器卡死宕机死机停止下载的AutoHotkey脚本2024年8月14日
; 测试环境:AutoHotkey_1.1.37.02_Setup.exe & Windows_Server_2012_标准版.ISO
; 测试结果:测试通过,能够在服务器上实现 7x24小时不间断高速下载夸克网盘中的文件夹到本地磁盘
; 设置环境变量
runwith("admin","u32")
#NoEnv
; #Warn
SendMode Input
SetWorkingDir %A_ScriptDir%
#SingleInstance,force
#Persistent
#WinActivateForce
CoordMode,Mouse,Window
;~ #NoTrayIcon
#include FindText.ahk
DetectHiddenWindows,On
SetTitleMatchMode,2
; RunWith("admin",32)
;等待指定标题窗口出现
; WinWait, story 反馈请访问www.pcstory.fun ahk_class Global\{4F7961BA-AD65-4018-BDEA-1BA1FF77CD66} ahk_exe pcstory.exe
SetTimer,ReloadQuarkPan,600000
; 按快捷键F4 立即测试夸克网盘电脑客户端重启是否成功
Hotkey,F4,ReloadQuarkPan
; 按快捷键Ctrl+Alt+F4 立即终止此脚本
Hotkey,^!F4,ExitthisApp
; ^!F9::ReloadQuarkPan()
; ReloadQuarkPan()
return
ExitthisApp()
{
ExitApp
}
ReloadQuarkPan()
{
loop,5
{
Sleep,200
WinClose,ahk_exe QuarkCloudDrive.exe
Sleep,200
Process,Close,QuarkCloudDrive.exe
}
Sleep,200
Run,"C:\Program Files (x86)\quark-cloud-Drive\QuarkCloudDrive.exe" --launch-from=desktopicon,,Max
SetTimer,dianji,200
}
; https://www.cnblogs.com/delphixx/p/18378812
dianji()
{
; 传输
Text:="|<>*172$28.000008U8A1zsVM48DskF0HzXTxU0Q0CQFHyzJ10MbI4X3pEFstp11UZ4432Rk00008"
if (ok:=FindText(X, Y, 115-150000, 268-150000, 115+150000, 268+150000, 0, 0, Text))
{
FindText().Click(X, Y, "L")
}
; 下载 多截屏几次,多灰度阈值二值化几次,FindText() 找不到图片时再找找其他图片
Text:="|<>*151$26.00007zsWU20yY0U28087zs3U8U0gDt08U0U24yM0U0YU81mc20VA00008"
if (ok:=FindText(X, Y, 213-150000, 182-150000, 213+150000, 182+150000, 0, 0, Text))
{
FindText().Click(X, Y, "L")
}
Text:="|<>*189$24.zz4I10Tm104E10zz1k4E1Mzm1AII12TA105910CR10paU"
if (ok:=FindText(X, Y, 130-150000, 182-150000, 130+150000, 182+150000, 0, 0, Text))
{
FindText().Click(X, Y, "L")
}
Text:="|<>*188$14.0k0A030wnsA631VsMS631U0M0601U0Tzy"
if (ok:=FindText(X, Y, 98-150000, 182-150000, 98+150000, 182+150000, 0, 0, Text))
{
FindText().Click(X, Y, "L")
}
; https://www.cnblogs.com/delphixx/p/18378812
; 正在下载 多截屏几次,多灰度阈值二值化几次,FindText() 找不到图片时再找找其他图片
Text:="|<>*149$32.1k0000Q0zzxzzkC03U03U1lk0s0QQ0CUC703w3Vk0zVvzUCQS703XjVk0sMsQ0C0C703U3Vk0s0zzkC0C003U8"
if (ok:=FindText(X, Y, 385-150000, 136-150000, 385+150000, 136+150000, 0, 0, Text))
{
FindText().Click(X, Y, "L")
}
Text:="|<>*184$46.00060003zz0s0zzk60zzk700M0M00Q0lU1X01k360AA07EAM0kk0T0lz6301q360Nzk7AAM3Uk0QMlU+301kn608A070AM0Uk0Q0lU2301kDzy/zs70000U00Q2"
if (ok:=FindText(X, Y, 294-150000, 136-150000, 294+150000, 136+150000, 0, 0, Text))
{
FindText().Click(X, Y, "L")
}
Text:="|<>*187$48.0k0000lY1k1zzUlgTzs3U7za3003U0lY3603UDzz6603c1VU6603s1UYA603g7yqQzs3a30wQ603X6kww603VbysA603U0kmA603U0lnA603U7zvBzw3U0lOA003U0kCU"
if (ok:=FindText(X, Y, 310-150000, 136-150000, 310+150000, 136+150000, 0, 0, Text))
{
FindText().Click(X, Y, "L")
}
; 全部开始,多截屏几次,多灰度阈值二值化几次,FindText() 找不到图片时再找找其他图片
Text:="|<>*179$48.1U4TTy8E1ETk488E68FG480Y86+I48z2zxzqzzHy0U0F48I10UTF485yDyFF48R20UFS48B20UTE88HyTzFEE8V2U"
if (ok:=FindText(X, Y, 1048-150000, 136-150000, 1048+150000, 136+150000, 0, 0, Text))
{
Sleep,500
FindText().Click(X, Y, "L")
Sleep,500
SetTimer,dianji,Delete
}
; https://www.cnblogs.com/delphixx/p/18378812
Text:="|<>*167$14.3w1VUU4E0g0C21UsMC621k0o08U4660z2"
if (ok:=FindText(X, Y, 1012-150000, 136-150000, 1012+150000, 136+150000, 0, 0, Text))
{
Sleep,500
FindText().Click(X, Y, "L")
Sleep,500
SetTimer,dianji,Delete
}
Text:="|<>*181$36.4TTy8ETk488EFG480Y+I48z2zqzzHy0F48I1TF485yFF48R2FS48B2TE88HyFEE8V2U"
if (ok:=FindText(X, Y, 1054-150000, 136-150000, 1054+150000, 136+150000, 0, 0, Text))
{
Sleep,500
FindText().Click(X, Y, "L")
Sleep,500
SetTimer,dianji,Delete
}
}
; https://www.cnblogs.com/delphixx/p/18378812
; 强制自身进程以 管理员权限 或 普通权限 或 ANSI 或 U32 或 U64 版本运行。
; 例1: runwith("admin","u32") 强制自身以 u32 + 管理员权限 运行。
; 例2: runwith("","ansi") 强制自身以 ansi 版本运行(权限不变)。
; 例3: runwith("normal") 强制自身以 普通权限 运行(版本不变)。
RunWith(RunAsAdmin:="Default", ANSI_U32_U64:="Default")
{
; 格式化预期的模式
switch, RunAsAdmin
{
case "Normal","Standard","No","0": RunAsAdmin:=0
case "Admin","Yes","1": RunAsAdmin:=1
case "default": RunAsAdmin:=A_IsAdmin
default: RunAsAdmin:=A_IsAdmin
}
switch, ANSI_U32_U64
{
case "A32","ANSI","A": ANSI_U32_U64:="AutoHotkeyA32.exe"
case "U32","X32","32": ANSI_U32_U64:="AutoHotkeyU32.exe"
case "U64","X64","64": ANSI_U32_U64:="AutoHotkeyU64.exe"
case "default": ANSI_U32_U64:="AutoHotkey.exe"
default: ANSI_U32_U64:="AutoHotkey.exe"
}
; 获取传递给 “.ahk” 的用户参数(不是 /restart 之类传递给 “.exe” 的开关参数)
for k, v in A_Args
{
if (RunAsAdmin=1)
{
; 转义所有的引号与转义符号
v:=StrReplace(v, "\", "\\")
v:=StrReplace(v, """", "\""")
; 无论参数中是否有空格,都给参数两边加上引号
; Run 的内引号是 "
ScriptParameters .= (ScriptParameters="") ? """" v """" : A_Space """" v """"
}
else
{
; 转义所有的引号与转义符号
; 注意要转义两次 Run 和 RunAs.exe
v:=StrReplace(v, "\", "\\")
v:=StrReplace(v, """", "\""")
v:=StrReplace(v, "\", "\\")
v:=StrReplace(v, """", "\""")
; 无论参数中是否有空格,都给参数两边加上引号
; RunAs.exe 的内引号是 \"
ScriptParameters .= (ScriptParameters="") ? "\""" v "\""" : A_Space "\""" v "\"""
}
}
; 判断当前 exe 是什么版本
if (!A_IsUnicode)
RunningEXE:="AutoHotkeyA32.exe"
else if (A_PtrSize=4)
RunningEXE:="AutoHotkeyU32.exe"
else if (A_PtrSize=8)
RunningEXE:="AutoHotkeyU64.exe"
; 运行模式与预期相同,则直接返回。 ANSI_U32_U64="AutoHotkey.exe" 代表不对 ahk 版本做要求。
if (A_IsAdmin=RunAsAdmin and (ANSI_U32_U64="AutoHotkey.exe" or ANSI_U32_U64=RunningEXE))
return
; 如果当前已经是使用 /restart 参数重启的进程,则报错避免反复重启导致死循环。
else if (RegExMatch(DllCall("GetCommandLine", "str"), " /restart(?!\S)"))
{
预期权限:=(RunAsAdmin=1) ? "管理员权限" : "普通权限"
当前权限:=(A_IsAdmin=1) ? "管理员权限" : "普通权限"
ErrorMessage=
(LTrim
预期使用: %ANSI_U32_U64%
当前使用: %RunningEXE%
预期权限: %预期权限%
当前权限: %当前权限%
程序即将退出。
)
MsgBox 0x40030, 运行状态与预期不一致, %ErrorMessage%
ExitApp
}
else
{
; 获取 AutoHotkey.exe 的路径
SplitPath, A_AhkPath, , Dir
if (RunAsAdmin=0)
{
; 强制普通权限运行
switch, A_IsCompiled
{
; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。
; 工作目录不用单独指定,默认使用 A_WorkingDir 。
case, "1": Run, RunAs.exe /trustlevel:0x20000 "\"%A_ScriptFullPath%\" /restart %ScriptParameters%",, Hide
default: Run, RunAs.exe /trustlevel:0x20000 "\"%Dir%\%ANSI_U32_U64%\" /restart \"%A_ScriptFullPath%\" %ScriptParameters%",, Hide
}
}
else
{
; 强制管理员权限运行
switch, A_IsCompiled
{
; %A_ScriptFullPath% 必须加引号,否则含空格的路径会被截断。%ScriptParameters% 必须不加引号,因为构造时已经加了。
; 工作目录不用单独指定,默认使用 A_WorkingDir 。
case, "1": Run, *RunAs "%A_ScriptFullPath%" /restart %ScriptParameters%
default: Run, *RunAs "%Dir%\%ANSI_U32_U64%" /restart "%A_ScriptFullPath%" %ScriptParameters%
}
}
ExitApp
}
}
; https://www.cnblogs.com/delphixx/p/18378812