Autohotkey 为什么脚本停止工作并需要重新加载?

Autohotkey 为什么脚本停止工作并需要重新加载?,autohotkey,Autohotkey,我有一个用于打开Firefox的脚本,该脚本包含自定义的快捷方式,并在我关闭浏览器时关闭。最近,当我第一次打开它并尝试使用快捷方式时,它在重新加载脚本之前不起作用,即使脚本仍在运行。我已经有一段时间没有修改剧本了。谁能告诉我发生了什么事 谢谢, 艾伦 对我来说,脚本的问题似乎是runwait使脚本停止运行firefox的当前线程 该线程然后等待firefox关闭,给你“还在等待”。。。然后,当它关闭时,下一行是IfWinExist ahk_class MozillaWindowClass,它将不

我有一个用于打开Firefox的脚本,该脚本包含自定义的快捷方式,并在我关闭浏览器时关闭。最近,当我第一次打开它并尝试使用快捷方式时,它在重新加载脚本之前不起作用,即使脚本仍在运行。我已经有一段时间没有修改剧本了。谁能告诉我发生了什么事

谢谢, 艾伦


对我来说,脚本的问题似乎是
runwait
使脚本停止运行firefox的当前线程

该线程然后等待firefox关闭,给你“还在等待”。。。然后,当它关闭时,下一行是
IfWinExist ahk_class MozillaWindowClass
,它将不存在,使脚本跳到
Exitapp

当RunWait处于等待状态时,可以通过热键、自定义菜单项或计时器启动新线程

使用
RunWait
时,某些程序会立即返回,即使它们仍在运行,这些程序会产生另一个进程。按照脚本的设置方式,它可能会偶尔停止RunWait进入这种等待状态

这将使您无法启动新线程,因为autohotkey不是多线程的


所以我建议使用类似于
WinWaitClose
的东西,因为这样也可以启动新线程

当WinWaitClose处于等待状态时,可以通过热键、自定义菜单项或计时器启动新线程

大概是这样的:

Run, C:\Program Files\Mozilla Firefox\firefox.exe, , max
WinWait, ahk_class MozillaWindowClass
WinWaitClose  ; Wait for the exact window found by WinWait to be closed.
Exitapp


希望对你有所帮助

我喜欢你的abc热串!您意识到,通过使用RunWait,脚本将一直等待,直到您关闭FireFox。。。。。换句话说,脚本将处于活动状态(作为图标),但不会执行任何操作。。。将runWait更改为run,然后添加一行winwait…嗨,罗伯特,我将runWait更改为run,但我不确定你对winwait的建议。我添加了WinWait,Mozilla Firefox,然后尝试了WinWait,ahk_类Mozilla WindowClass,但这不起作用,而且在我关闭Firefox时它也阻止了脚本关闭。我从你帮助我的另一个脚本中得到了RunWait,它似乎起到了防止脚本立即结束的作用。问题是,原始形式的脚本确实可以按照我的要求工作,大多数情况下不需要重新加载,但并不总是这样。我不得不收回我之前的陈述。我知道你在做什么,这是一个非常聪明的方法!在使用IfWinExists进行测试之前,您可能需要添加500毫秒的睡眠时间,并且一旦origination FireFox窗口关闭,而另一个FF窗口仍然打开,脚本将永远保持打开状态。我在你的代码中看到了很多不必要的返回和空行,但总而言之,我找不到什么地方出错了。但是既然您已经创建了特定于FF的热键/字符串,为什么不让脚本一直运行呢?我对所有这些
return
语句感到非常困惑。几乎所有这些代码都是冗余的死代码。此外,浏览器关闭时脚本不会关闭。它只在启动Firefox后检查一次,是否有Firefox窗口打开并退出,如果没有。我将从重构代码开始:将中性指令移到脚本的开头;如果对应的热键为一行,则删除每个返回的
;最后那
#ifWinActive
在做什么?好了,伙计们,我删除了额外的回报!谢谢我不会再那样做了。让我澄清一下:这个问题只是偶尔出现,只是在重新启动后的第一次出现。所以测试起来很乏味,因为我必须不断地重新启动,但到目前为止它似乎已经解决了这个问题。我有10个这样的脚本,它们在开始时都使用相同的代码,运行良好。这些没有额外的回报。MCL,当我关闭程序时,脚本绝对会关闭;托盘图标消失。#IfWinActive之所以存在,是因为我只是在复制别人的脚本,而且似乎很有效。你是说这是多余的吗?
Run, C:\Program Files\Mozilla Firefox\firefox.exe, , max
WinWait, ahk_class MozillaWindowClass
WinWaitClose  ; Wait for the exact window found by WinWait to be closed.
Exitapp