我的 AutoIt 脚本应该在给定的时间间隔内每 40 分钟单击一次左键:
Func Main()
Run("kocske.jpg")
While 0 < 1
If CheckTime() == true Then
MouseClick("left")
EndIf
; Sleep for 40 minutes
Sleep(60000 * 40)
WEnd
EndFunc
; The function checks if the current time is between 17:00 and 20:00
Func CheckTime()
If @Hour >= 17 AND @Hour <= 20 Then
Return true
Else
Return false
EndIf
EndFunc
我将其保存为 .au3 文件并将其编译为可执行文件。但是当我运行它时,什么也没发生(好像它从未启动过)。
我添加了Run("kocske.jpg")
来测试脚本是否启动,并在脚本的文件夹中放置了一个名为"kocske.jpg"的JPG文件。它不会打开文件,并且任务管理器不会显示它正在运行。
为什么我的脚本无法运行?
我稍微重写了你的程序以包括通常的习惯(下面评论)
Main() ; calls the Main() Function
Func Main()
ShellExecute("kocske.jpg") ; opens the image with it's default viewer; Note: you should add full path
While True
If CheckTime(17, 21) Then ; good habit to work with parameters; makes your function flexible
; probably you want to locate your mouse to a special location before clicking
; and also activate a certain application? Consider ControlClick()
MouseClick("left")
EndIf
Sleep(60000 * 40) ; Sleep for 40 minutes
WEnd
EndFunc ;==>Main
; The function checks if the current time is between 17:00 and 20:00 (19:59:59)
Func CheckTime($TimeA = 17, $TimeB = 20) ; defines default parameters, if they are not given
If @HOUR >= $TimeA And @HOUR < $TimeB Then Return True ; no Else needed
Return False
EndFunc ;==>CheckTime
注意:@HOUR < $TimeB
而不是@HOUR <= $TimeB
-
运行函数
为什么我的脚本无法运行?
因为函数是定义的,但不是调用的。
如果你想执行
Main()
,那么在函数定义(全局范围)之外添加一行"Main()
"。示例(第一行,根据文档 - 关键字参考 - 功能...返回。。。EndFunc):Main() Func Main() Run("kocske.jpg") While 0 < 1 If CheckTime() == true Then MouseClick("left") EndIf ; Sleep for 40 minutes Sleep(60000 * 40) WEnd EndFunc ; The function checks if the current time is between 17:00 and 20:00 Func CheckTime() If @Hour >= 17 AND @Hour <= 20 Then Return true Else Return false EndIf EndFunc
-
打开文件
我添加了
Run("kocske.jpg")
来测试脚本是否启动......根据文档 - 函数参考 -
Run()
:运行外部程序。
"kocske.jpg"不是">外部程序";请改用
ShellExecute("kocske.jpg")
:使用 ShellExecute API 运行外部程序。
-
比较运算符
分配和比较之间的
=
使用没有区别(根据文档 - 语言参考 - 运算符)。例:; Equal sign (=) as assignment operator: Global Const $g_bValue = True ; Equal sign (=) as comparison operator: If $g_bValue = True Then; Or just: If $g_bValue Then Beep(500, 1000) EndIf
根据文档 - 语言参考 - 运算符:
==
测试两个字符串是否相等。区分大小写。如果左值和右值还不是字符串,则它们将转换为字符串。仅当字符串比较需要区分大小写时,才应使用此运算符。