在 AutoHotkey 中禁用修饰键

在 AutoHotkey 中禁用修饰键

我想将控制键 Ctrl+Left 映射到 Home 并将 Ctrl+Right 映射到 End,并且我使用 AutoHotkey,我的脚本很简单:

^Left::Home
^Right::End

但是,当生成 Home 和 End 键时,它们会被解释为 Ctrl+Home 和 Ctrl+End,因为我是按住 Ctrl 键来生成它们的。如何在重新分配键时禁用 Ctrl 键或任何修饰键?

答案1

看起来您只需使用 Send 即可:

^Left::Send {Home}
^Right::Send {End}

;Doesn't work with Shift, so we can add that manually:

+^Left::Send +{Home}
+^Right::Send +{End}

;You can add any other modifier keys you need to work.

它似乎使用发送将暂时释放任何已按下的修饰键,这样 Send 的输出就不会受到它们的影响——除非你特意使用{瞎的}保留已经按住的修饰键。

a::b格式用于重新映射键并保留任何按下的修饰键。(实际上内部使用 Send {Blind}

答案2

尝试:

^Left::
KeyWait Control
Home
Return

^Right::
KeyWait Control
End
Return

如果您只需要任何代码并且不需要是自动热键,则 AuotIt 应该可以工作:

HotKeySet("^{LEFT}", "Home")
HotKeySet("^{RIGHT}", "End")
HotKeySet("{ESC}", "Terminate")

While 1
    Sleep(100)
WEnd

Func Home()
    Send("{HOME}")
EndFunc

Func End()
    Send("{END}")
EndFunc

Func Terminate()
    Exit 0
EndFunc

相关内容