1+ # Requires AutoHotkey v2.0 ; 确保脚本在 AutoHotkey v2 下运行
2+ #NoTrayIcon ; 不显示托盘图标
3+ ; AI工具辅助
4+ ; 默认点击间隔时间(秒)、点击次数、点击间隔(毫秒)、循环次数和按键类型
5+ ClickInterval := 5
6+ ClickCount := 1
7+ ClickDelay := 100 ; 默认点击间隔为 100 毫秒
8+ LoopCount := 1 ; 默认循环次数为 1
9+ ClickButton := " 左键" ; 默认点击左键
10+ IsRunning := false ; 标记定时器是否正在运行
11+ IsPaused := false ; 标记是否处于暂停状态
12+ RemainingTime := 0 ; 剩余时间(毫秒)
13+
14+ ; 启动时弹出信息窗口
15+ MsgBox (" 欢迎使用定时点击工具`n使用AutoHotkey v2.0编写`n`n`nHAF半个水果`nhttps://github.com/little-Data/TimedClickTool`n`n点击确定后即可使用`n" , " 欢迎" , " OK" )
16+
17+ ; 创建 GUI 窗口
18+ MyGui := Gui ()
19+ MyGui.Title := " 定时点击工具"
20+ MyGui.Add(" Text" ,, " 点击间隔时间(秒):" )
21+ MyGui.Add(" Edit" , " vClickInterval" ).Text := ClickInterval
22+ MyGui.Add(" Text" , " yp+30" , " 点击次数:" )
23+ MyGui.Add(" Edit" , " vClickCount" ).Text := ClickCount
24+ MyGui.Add(" Text" , " yp+30" , " 点击间隔(毫秒):" )
25+ MyGui.Add(" Edit" , " vClickDelay" ).Text := ClickDelay
26+ MyGui.Add(" Text" , " yp+30" , " 循环次数:`n(-1 为无限循环, 按“重设”停止)" )
27+ MyGui.Add(" Edit" , " vLoopCount" ).Text := LoopCount
28+ MyGui.Add(" Text" , " yp+30" , " 点击按键:" )
29+ ClickButtonDropdown := MyGui.Add(" DropDownList" , " vClickButton" , [" 左键" , " 中键" , " 右键" ])
30+ ClickButtonDropdown.Text := ClickButton ; 设置默认选项
31+ MyGui.Add(" Text" , " yp+30" , " 剩余时间:" )
32+ RemainingTimeText := MyGui.Add(" Text" , " yp+0 w100" , " 00:00:00.000" ) ; 显示剩余时间
33+
34+ ; 添加按钮(默认垂直排列)
35+ StartButton := MyGui.Add(" Button" , " Default" , " 开始" )
36+ StartButton.OnEvent(" Click" , StartClick)
37+ PauseButton := MyGui.Add(" Button" ,, " 暂停" )
38+ PauseButton.OnEvent(" Click" , PauseClick)
39+ ResetButton := MyGui.Add(" Button" ,, " 重设" )
40+ ResetButton.OnEvent(" Click" , ResetClick)
41+ AboutButton := MyGui.Add(" Button" ,, " 关于" )
42+ AboutButton.OnEvent(" Click" , AboutClick)
43+ MyGui.Show()
44+ PauseButton.Enabled := false
45+
46+ ; 格式化时间为 HH:MM:SS.MS
47+ FormatTime (ms ) {
48+ ; 计算小时、分钟、秒和毫秒
49+ hours := Format (" {:02}" , ms // 3600000 )
50+ ms := Mod (ms, 3600000 )
51+ minutes := Format (" {:02}" , ms // 60000 )
52+ ms := Mod (ms, 60000 )
53+ seconds := Format (" {:02}" , ms // 1000 )
54+ ms := Format (" {:03}" , Mod (ms, 1000 ))
55+ return hours " :" minutes " :" seconds " ." ms
56+ }
57+
58+ ; 执行点击的函数
59+ PerformClicks () {
60+ global ClickCount, ClickButton, ClickDelay, ClickInterval, RemainingTime, IsRunning, LoopCount
61+ Loop ClickCount {
62+ ; 根据选择的按键执行点击
63+ if (ClickButton = " 左键" ) {
64+ Click (" Left" )
65+ } else if (ClickButton = " 中键" ) {
66+ Click (" Middle" )
67+ } else if (ClickButton = " 右键" ) {
68+ Click (" Right" )
69+ }
70+ Sleep (ClickDelay) ; 每次点击间隔自定义时间
71+ }
72+ ; 主要功能执行结束后,恢复按钮状态
73+ StartButton.Enabled := true
74+ PauseButton.Enabled := false
75+
76+ ; 如果未点击“重设”按钮且循环次数未用完,则重新开始倒计时
77+ if (IsRunning && (LoopCount = - 1 || LoopCount > 1 )) {
78+ if (LoopCount ! = - 1 ) {
79+ LoopCount-- ; 减少循环次数
80+ PauseButton.Enabled := true
81+ StartButton.Enabled := false
82+ }
83+ RemainingTime := ClickInterval * 1000
84+ RemainingTimeText.Text := FormatTime (RemainingTime)
85+ SetTimer (UpdateRemainingTime, 100 ) ; 每 100 毫秒更新一次
86+ } else {
87+ IsRunning := false
88+ }
89+ }
90+
91+ ; 更新剩余时间的函数
92+ UpdateRemainingTime () {
93+ global RemainingTime, RemainingTimeText
94+ if (RemainingTime > 0 ) {
95+ RemainingTime - = 100 ; 每次减少 100 毫秒
96+ RemainingTimeText.Text := FormatTime (RemainingTime)
97+ } else {
98+ SetTimer (UpdateRemainingTime, 0 ) ; 停止定时器
99+ IsRunning := false
100+ PerformClicks() ; 在指定时间后执行点击
101+ }
102+ }
103+
104+ ; 开始按钮的事件
105+ StartClick (* ) {
106+ global IsRunning, IsPaused, ClickInterval, ClickCount, ClickDelay, ClickButton, RemainingTime, LoopCount
107+ ; 获取用户输入的点击间隔时间、点击次数、点击间隔、循环次数和按键类型
108+ ClickInterval := MyGui.Submit(false ).ClickInterval
109+ ClickCount := MyGui.Submit(false ).ClickCount
110+ ClickDelay := MyGui.Submit(false ).ClickDelay
111+ LoopCount := MyGui.Submit(false ).LoopCount
112+ ClickButton := MyGui.Submit(false ).ClickButton
113+
114+ ; 检查输入是否为整数(循环次数可以是 -1)
115+ if ! (IsInteger(ClickInterval) && IsInteger(ClickCount) && IsInteger(ClickDelay) && (IsInteger(LoopCount) || LoopCount = - 1 )) {
116+ MsgBox (" 错误:输入必须为整数!" , " 错误" , " OK" )
117+ return ; 停止运行
118+ }
119+
120+ ; 检查点击间隔时间是否小于 2 秒
121+ if (ClickInterval < 2 ) {
122+ MsgBox (" 错误:点击间隔时间不能小于 2 秒!" , " 错误" , " OK" )
123+ return ; 停止运行
124+ }
125+
126+ if (IsPaused) {
127+ ; 如果处于暂停状态,则恢复计时器
128+ SetTimer (UpdateRemainingTime, 100 )
129+ IsPaused := false
130+ PauseButton.Enabled := true ; 暂停按钮恢复正常
131+ } else {
132+ ; 将秒转换为毫秒
133+ RemainingTime := ClickInterval * 1000
134+ RemainingTimeText.Text := FormatTime (RemainingTime)
135+ ; 启动定时器
136+ SetTimer (UpdateRemainingTime, 100 ) ; 每 100 毫秒更新一次
137+ IsRunning := true
138+ }
139+ StartButton.Enabled := false ; 开始按钮变为不可用
140+ PauseButton.Enabled := true ; 暂停按钮恢复正常
141+ ResetButton.Enabled := true ; 重设按钮恢复正常
142+ }
143+
144+ ; 暂停按钮的事件
145+ PauseClick (* ) {
146+ global IsPaused
147+ ; 暂停计时器
148+ SetTimer (UpdateRemainingTime, 0 )
149+ IsPaused := true
150+ StartButton.Enabled := true ; 开始按钮恢复正常
151+ PauseButton.Enabled := false ; 暂停按钮变为不可用
152+ }
153+
154+ ; 重设按钮的事件
155+ ResetClick (* ) {
156+ global RemainingTime, ClickInterval, ClickCount, ClickDelay, ClickButton, IsRunning, IsPaused, LoopCount
157+ ; 停止定时器
158+ SetTimer (UpdateRemainingTime, 0 )
159+ IsRunning := false
160+ IsPaused := false
161+ ; 重置剩余时间
162+ RemainingTime := ClickInterval * 1000
163+ RemainingTimeText.Text := FormatTime (RemainingTime)
164+ StartButton.Enabled := true ; 开始按钮恢复正常
165+ PauseButton.Enabled := false ; 暂停按钮变为不可用
166+ }
167+
168+ ; 关于按钮的事件
169+ AboutClick (* ) {
170+ MsgBox (" 定时点击工具`n版本: 1.0`n作者: HAF半个水果`n描述: 这是一个用于定时点击鼠标按键的工具,使用AutoHotkey v2.0编写`n`nhttps://github.com/little-Data/TimedClickTool" , " 关于" , " OK" )
171+ }
172+
173+ ; 关闭窗口时的事件
174+ GuiClose (* ) {
175+ ExitApp () ; 直接退出软件
176+ }
177+
178+ ; 判断是否为整数的函数
179+ IsInteger (value ) {
180+ return value ~ = " ^-?\d+$"
181+ }
0 commit comments