在同一脚本中使用双冒号 :: 和热键命令会中断一个
Posted
技术标签:
【中文标题】在同一脚本中使用双冒号 :: 和热键命令会中断一个【英文标题】:Using Double Colon :: and the Hotkey command in the same script breaks one 【发布时间】:2020-07-30 07:12:27 【问题描述】:我在脚本中发生了最奇怪的行为。在下面的 MWE 中,只要有 F1
行,Hotkey F2
声明就不起作用。如果我注释掉第 2 行,那么 F2
热键就可以正常工作。
#SingleInstance, Force
F1::MsgBox You pressed F1
Hotkey F2, Alone
return
Alone:
MsgBox You pressed F2.
return
双冒号符号和“热键”命令之间是否存在交互作用?有没有解决的办法?
当然,这是一个更大的脚本的一部分,其中定义了几个不同的热键。双冒号表示法用于代码中的大多数热键,但我认为我必须将 Hotkey 命令用于动态键(例如通过 ini 文件定义的键)。此代码是具有静态热键(使用双冒号)的较大代码集的一部分,我无法更改该部分代码。
我在 Windows Enterprise 1909(OS Build 18363.720)上运行 Autohotkey v1.1.25.02
注意:我注意到,如果我将双冒号声明放在 Hotkey
命令之后(即重新排序第 2 行和第 3 行),它似乎可以工作。我不知道这是否是一个选择。原始脚本中有数百行代码。我仍然想知道导致这种行为的原因。
【问题讨论】:
【参考方案1】:您正在创建一个单行热键F1
。
代码执行不会继续到下面的行。
这是您要查找的语法:
#SingleInstance, Force
F1::
MsgBox, You pressed F1
Hotkey, F2, Alone
return
Alone:
MsgBox, You pressed F2.
return
【讨论】:
实际上,F1 和 F2 热键是独立的热键。我不想将Hotkey, F2, Alone
放在F1 调用的进程中。也许添加第一个return
行不是正确的举动,但我注意到如果我不这样做,脚本会在脚本启动时运行子进程“Alone”。我将尝试将 F1 热键设置为多线程,看看是否可以解决问题。
在这种情况下,return
不会做任何事情,您应该在auto execute section 中使用Hotkey
命令。最初运行脚本时,代码执行会在遇到的第一个热键标签处停止。 Hotkey
命令从未在您的代码中执行。是的,除非您在它们之前停止代码执行,否则自动执行部分将进入您的标签。 (旁注,标签是遗留的,使用函数)
好吧,我很困惑。 Hotkey
命令没有被执行,因为它不在自动执行部分,该部分在第 2 行的热键声明处结束。但是,执行通过下面的标签继续(没有第 4 行的return
)?这些似乎相互矛盾。很抱歉我的问题,我唯一的正式语言培训是在 LaTeX 中。该标签用于 b/c 它是Hotkey 命令文档中最简单的示例。这不是绝对必要的。
Nono,在这种特殊情况下,自动执行部分确实不会转到标签,因为代码执行在它之前被热键标签(以及 return
)停止。在您的第一条评论中,您刚刚说过标签内的代码在您不希望发生的时候是如何执行的,所以我刚刚提到,在这些情况下,原因是代码执行 bleeding 进入标签。 以上是关于在同一脚本中使用双冒号 :: 和热键命令会中断一个的主要内容,如果未能解决你的问题,请参考以下文章
linux脚本中的冒号是啥意思? 第一行:read YN , 第二行 :$YN:=yes,第三行 case $YN in ...