如何在 autohotkey 中使用单个脚本而不是同时运行两个脚本?

如何在 autohotkey 中使用单个脚本而不是同时运行两个脚本?

朋友们,我有两个脚本。第一个脚本有一些热键和热字符串,第二个脚本包含一些计时器命令,用于在一定时间过去时激活特定窗口。当我将第二个脚本的代码粘贴到第一个脚本中时,第一个脚本(包含热字符串和热键)也会停止工作。当两个脚本同时运行时,它们就可以完美运行。所以我想使用一个脚本而不是两个脚本。第一个脚本的代码如下-

!r::
Send, {SHIFT DOWN}
sleep 100
send {F3}
sleep 100
send {SHIFT UP}
sleep 3000 
send tm{ENTER}
sleep 3000
send a
sleep 100
send {ENTER 3}
sleep 100
send c
sleep 100
send nr{F4}
return

!p::
Send, {SHIFT DOWN}{F3}{SHIFT UP}
sleep 3000 
send tm{ENTER}
sleep 3000
send a{ENTER}{ENTER}{ENTER}
sleep 500
send c
sleep 500
send np{F4}
return

!a::
IfWinNotActive, Finacle - Microsoft Internet Explorer, , WinActivate,    Finacle - Microsoft Internet Explorer, 
WinWaitActive, Finacle - Microsoft Internet Explorer, 
Send, {SHIFT DOWN}{F3}{SHIFT UP}
Sleep, 3000
send acli{ENTER}
Sleep, 4000
send {ENTER}
send ^f
sleep 100
send 01.03.2015
sleep 100
send {shiftdown}{tab}{shiftup}
sleep 200
send {CTRLDOWN}v{CTRLUP}
return
;there are so many more hotkeys and hotstrings in this script

同样,第二个脚本的内容如下-

#Persistent
SetTimer, forFinacle, 10000 ; check every 10 seconds
#IfWinActive, Finacle - Microsoft Internet Explorer
~F4::timeF4:=A_TickCount
~F10::timeF10:=A_TickCount

forFinacle:
If (A_TickCount-timeF4 > 800000) && (A_TickCount-timeF10 > 800000)
{
WinActivate Finacle - Microsoft Internet Explorer 
Send {F4}
timeF4:=A_TickCount
}
return

所以我想将两个脚本的内容合并到一个脚本中,这样该脚本就可以完美运行。请帮帮我。非常感谢。

答案1

保持脚本一直运行(也就是说,直到用户关闭它或者遇到 ExitApp)。

#执着的

如果此指令存在于脚本的任何地方,则该脚本将在自动执行部分(脚本的顶部)完成后继续运行。这在脚本包含计时器和/或自定义菜单项但不包含热键、热字符串或任何使用 OnMessage() 或 Gui 的情况下非常有用。

如果将此指令添加到现有脚本,您可能需要将部分或所有 Exit 更改为 ExitApp。这是因为 Exit 不会终止持久脚本;它只会终止当前线程。

在 v1.0.16+ 中,此指令还会使脚本成为单实例。要覆盖此指令或更改单实例的行为方式,请参阅

#单一实例。

#单实例

确定脚本在运行时是否允许再次运行。

#SingleInstance [强制|忽略|关闭]

答案2

在定义特定于上下文的热键后,务必使用#IfWinActive语句,否则所有后续热键都需要先前定义的上下文才能执行。

例如,如果将第二个代码块放在整个合并脚本的开头,则所有热键的上下文都会是,直到遇到#IfWinActive, Finacle - Microsoft Internet Explorer不同的指令或空白指令。#IfWinActive

为了避免剪切和粘贴错误及其他恼人的问题(例如将一段热键代码从大脚本中的一个位置移动到另一个位置),我倾向于#IfWinActive自由使用语句,并始终在每个部分之后以及文件末尾保留一个空白(由于原始实现存在记录问题)。

相关内容