在同一脚本中使用双冒号 :: 和热键命令会中断一个

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 进入标签。

以上是关于在同一脚本中使用双冒号 :: 和热键命令会中断一个的主要内容,如果未能解决你的问题,请参考以下文章

Chrome F8/热键调试器在拖放操作期间中断

如何编写文本文件,然后在同一个 Bash 脚本中读取它?

连击键盘方向键 安一下出现双击效果 高手给个安键精灵的脚本

linux脚本中的冒号是啥意思? 第一行:read YN , 第二行 :$YN:=yes,第三行 case $YN in ...

常用热键

推荐一款轻量小众却高效免费开源windows热键脚本语言Autohotkey