我的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")
来测试脚本是否开始,并放置一个名为&#34的JPG文件; kocske.jpg&#34;在脚本的文件夹中。它不会打开文件,任务管理器也不会显示它正在运行。
为什么我的脚本没有运行?
答案 0 :(得分:1)
为什么我的脚本没有运行?
因为定义了函数,但没有调用函数。
如果您希望执行Main()
,请添加一行&#34; Main()
&#34;在函数定义之外(全局范围)。示例(第一行,根据Documentation - Keyword Reference - Func...Return...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")
来测试脚本是否开始...
根据Documentation - Function Reference - Run()
:
运行外部程序。
&#34; kocske.jpg&#34;不是&#34; 外部程序&#34 ;;改为使用ShellExecute("kocske.jpg")
:
使用ShellExecute API运行外部程序。
=
- 在分配和比较之间没有区别(根据Documentation - Language Reference - Operators)。例如:
; 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
根据Documentation - Language Reference - Operators:
==
测试两个字符串是否相等。 区分大小写。如果左侧和右侧值不是字符串,则它们将转换为字符串。只有在字符串比较需要区分大小写时才应使用此运算符。
答案 1 :(得分:1)
我重写了你的程序,包括通常的习惯(下面评论)
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