【问题标题】:Why autohotkey deos not send Ctrl-Space where Space is an input为什么autohotkey deos不发送空格是输入的Ctrl-Space
【发布时间】:2021-04-24 06:43:36
【问题描述】:

考虑以下作业: 当我键入- 后跟key 时,结果是Ctrl-key。这适用于普通键。 但是当键是空格时,它就不起作用了。

知道为什么会这样吗?以及如何修复代码?

-::
Input, key, L1,{LCtrl}
send, ^{%key%}
return

编辑。 尝试运行上面的脚本一个以 Ctrl-Space 作为快捷方式的程序,看看它不起作用。事实上,如果你按- 后跟Space,脚本应该调用Ctrl-Space,但事实并非如此。例如:

  • 在 Microsoft Excel 或 Libreoffice Calc 中,Ctrl-Space 可以选择当前列。
  • 在 Emacs 中,Ctrl-Space 保留用于设置标记。

【问题讨论】:

  • 我无法使用 SpaceTabEnter 键复制此错误,但使用 Input docs:“空白字符 如 Tab (`t) 按字面意思存储。Enter 存储为换行符 (`n)。您能否给我们提供一些无法正常使用的键的具体示例?
  • @Spyre 我添加了一些解释来复制错误。
  • 空格是默认的终止符之一,就像Tab、Enter等一样。将de默认更改为不包括空格。
  • @RobertIlbrink,即使我指定 Endkeys 也不起作用。例如,我修改了代码以使LCtrl 是唯一的Endkey,但它也不起作用。见上面修改后的代码。
  • 你是对的。我在发送行之前使用验证行尝试了您的脚本:MsgBox,,,"%key%"。这确认该空间正在被读取并存储在 key 参数中。所以问题出在发送行...

标签: autohotkey


【解决方案1】:

请改用SendInput

在 Excel 中测试以模仿 ^a、^x、^v、^space

-::
Input, key, L1,{LCtrl}
SendInput, ^%key%
Return

如果您想处理“特殊”键,请使用此语法将这些键添加到 endkey 列表中

Input [, OutputVar, Options, EndKeys, MatchList]

然后检查是否按下了哪个结束键

在 Firefox 中测试以模仿 ^PgDn、^PgUp

Input, key, L1,{LCtrl}{PgUp}{PgDn}
If (ErrorLevel = "EndKey:PgUp") {
  SendInput ^{PgUp}
}
Else If (ErrorLevel = "EndKey:PgDn") {
  SendInput ^{PgDn}
}
Else If (ErrorLevel = "EndKey:LCtrl") {
  Return   ;assumed you just want to abort input with the control key
}
Else {
  SendInput, ^%key%
}
Return

【讨论】:

  • 非常感谢,这样就解决了SPACE的问题,但是其他键还是有一些问题。例如,当您按- 后跟PgUpPgDn 时,预计上述命令发送Ctrl-PgUpCtrl-Pgdn。但事实并非如此。例如,尝试在 Firefox 中使用多个打开的选项卡来执行此操作。在这种情况下,Ctrl-PgUpCtrl-Pgdn 将向左和向右导航选项卡,但上述命令不起作用。再次感谢您。
  • @Name,我通过添加替代解决方案来编辑​​响应,使用 endkeys 检测特殊按下并做出相应响应。如果它适合你,请接受这个答案。
猜你喜欢
  • 2013-07-28
  • 2016-06-11
  • 2018-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
相关资源
最近更新 更多