如何在自动热键中分配顺序热键?ctrl+K 后跟 ctrl+D



我想在按下这些键序列时运行一个函数:

ctrl+K 后跟 ctrl+D

执行上述操作时,我们在整个过程中按住 Ctrl。我想将 function1(( 分配给 ctrl+K,但将 function2(( 分配给这个组合:ctrl+K 后跟 ctrl+D

是否可以

在自动热键中实现?

只是为了把事情说清楚,你可以想到Visual Studio中用于格式化代码的组合。

^k::
ctrl_k_var := true           ; assign the Boolean value "true" or "1" to this variable
SetTimer ctrl_k_action, -50  ; launch the "ctrl_k_action" subroutine automatically after this hotkey
return
^d::
; KeyWait, Ctrl             ; wait for Ctrl to be released
If (ctrl_k_var)             ; If the variable "ctrl_k_var" has the value "true" 
{
    ; SendRaw ctrl+K+D
    MsgBox, ctrl+K+D
    ctrl_k_var := false
}
else
{
    ; SendRaw ctrl+D
    MsgBox, ctrl+D
}
return

ctrl_k_action:
    KeyWait, Ctrl
    If (ctrl_k_var)
    {
        ; SendRaw ctrl+K
        MsgBox, ctrl+K
    }
    ctrl_k_var := false
return

编辑:只要您按住 Ctrl 键,它就会在获得 ctrl+K 后等待 ctrl+D。如果只想在 ctrl+K 之后等待一秒钟,请尝试以下操作:

^k::
    ctrl_k_var := true
    sleep 1000  ; wait 1 second for ctrl+D
    if (ctrl_k_var)  ; If  you don't press ctrl+D within 1 second after ctrl+K
        MsgBox, ctrl+K
    ctrl_k_var := false
return
^d::
    if (ctrl_k_var)  ; If  you press ctrl+D within 1 second after ctrl+K
        MsgBox, ctrl+K+D
    else
        MsgBox, ctrl+D
    ctrl_k_var := false
return
编辑

2:我编辑了第一个代码,使其仅在第一个函数 (ctrl+K( 中等待 Ctrl 被释放。

我编辑并调整了user3419297提供的第二个代码,这里是:

;~ If you want to wait for only one second after ctrl+K,
^k::
    ctrl_k_var := true
    sleep 1000  ; wait 1 second for ctrl+D
    if (ctrl_k_var)  ; If  you don't press ctrl+D within 1 second after ctrl+K
        MsgBox, ctrl+K
    ctrl_k_var := false
return
#If ctrl_k_var
    ^d::    
        MsgBox, ctrl+K+D
        ctrl_k_var := false
    return
#If

此脚本不会始终绑定 Ctrl+D,它只会在按下 Ctrl+K 时才使用 Ctrl+D,并且只会等待 Ctrl+D 1 秒。user3419297给出的答案的缺点是他的脚本会在脚本运行时始终将Ctrl + D与autohotkey绑定,我清理了代码,以便只有在按下Ctrl + K后才会获得Ctrl + D因此,Ctrl+D 并非始终与自动热键绑定,因此当用户未按 Ctrl+K 时,其他程序也可以使用 Ctrl+D

最新更新