使用Autohotkey模拟Ctrl +空格键+ AlphabeticalKey

时间:2013-12-15 12:27:30

标签: autohotkey

我的问题:

^space & c::
send {F2} 
send {Escape}

但它不起作用,我如何模拟 Ctrl + Space + AlphabeticaklKey?

3 个答案:

答案 0 :(得分:6)

正如我之前的发言者所说,它不能轻易完成。这是我的建议,似乎工作正常:

^space::
    Loop {
        if(GetKeyState("c")) {
            break
        }
        if(!GetKeyState("CTRL") || !GetKeyState("SPACE")) {
            return
        }
        Sleep, 50
    }
    msgbox, You have pressed CTRL+SPACE+C
return

代码非常明显。当按下 CTRL + SPACE 时,它会等待,直到释放其中一个或按下 C 。后者触发实际功能,否则返回 我实际上并不喜欢它,因为理论上它在某些情况下可能会失败(例如,当 CTRL + SPACE + C 时在执行到达 C 状态的检查之前按下并释放;虽然这似乎不太可能。)

更新

还有一种使用#If的方法。我建议使用它,因为它更复杂和可靠。这是因为它不需要任何循环:

#If GetKeyState("SPACE")
^c::Msgbox, You have pressed CTRL+SPACE+C

#If GetKeyState("c")
^space::Msgbox, You have pressed CTRL+SPACE+C

答案 1 :(得分:1)

据我所知,您只能将两个非热键与语法结合使用:

space & c:: msgbox space and c

您可以阅读here

  

您可以定义两个键的自定义组合(操纵杆除外)   按钮)使用&它们之间。在下面的例子中,你会持有   按下Numpad0,然后按第二个键触发热键:

     

Numpad0& Numpad1 :: MsgBox按住Numpad1的同时按下了Numpad1   NUMPAD0。 Numpad0& Numpad2 ::运行记事本

尝试使用控件以及:space & c & controlspace & ^c或任何其他组合都会导致编译错误。

我的建议是你不要将这三个键组合在一起。寻找纯热键组合或使用其他或多或少无用的键。

  • #!c:: windows + alt + c
  • AppsKey & c::

请记住,如果您使用普通键作为修改器,则必须将其重新映射到自身以保留原始功能,例如使用菜单键(appskey):

AppsKey:: Send {Appskey}
AppsKey & c:: ;do what you want

答案 2 :(得分:1)

实际上有几种方法可以获得帮助。首先,该语言的作者已转移到新域ahkscript.org。欢迎在我们的论坛中提出类似这样的问题。我今天碰巧正在挖掘这个网站并偶然看到了这个。

当您在热键之后有多行代码时,您需要返回一个代码:

^space & c::
send {F2} 
send {Escape}
return

希望有所帮助