ctrl+s 未在 autohotkey 脚本中发送

问题描述

即点击 ctrl+s 应该激活 ctrl+s...下面的不起作用。更简单的也不行 发送输入,^s。目标是让 ctrl+s 保存当前文档,然后通过更多代码加载另一个,保存部分永远不会工作。糟糕的代码,取决于我把睡眠放在哪里或没有睡眠,要么返回 s 或 shift s(无论如何在 1 个代码编辑器中)或什么都不返回。我基本上想要一个模仿自己的热键。

F4::ExitApp  
<^s::  
send,{lctrl down}  
SLEEP 300  
SEND s  
SLEEP 300  
SEND {lctrl up}  
return  

解决方法

我认为您的程序遇到的问题是让 ^s 在其自身内部发送另一个 ^s 正在创建一个无限递归循环,在该循环中,任何东西都无法越过您调用 ^s 的位置。为了防止这种情况,我们可以像这样使用 $ 修饰符:

$<^s::  
SendInput ^s
return  

来自the Modifier section of the docs的相关部分:

这通常只有在脚本使用 Send 命令来发送时才需要 发送包含热键本身的键,否则可能会 导致它自己触发。 $ 前缀强制键盘挂钩 用于实现这个热键,它作为一个副作用防止 从触发它发送命令。 $ 前缀相当于 在此热键定义上方的某处指定 #UseHook。


编辑:即使我删除了 $ 修饰符,它似乎对我来说也很好用。测试以下代码表明,在 SendInput 语句之前、之后或期间,代码执行似乎没有问题。

<^s::  
MsgBox no
SendInput,^s
MsgBox yes
return

可以检查您的 AHK 版本或安装吗?