将 Alt+Key 重新映射到同一个键不起作用?

将 Alt+Key 重新映射到同一个键不起作用?

这是我现在的键盘,Logitech K270:

罗技 K270 键盘

我想覆盖Browser_Home这样的:

  1. Browser_Home>>>Media_Next
  2. ALT+ Browser_Home>>>Browser_Home

虽然第一次重新映射有效,但第二次却无效,并且ALT+Browser_HomeMedia_Next发送。以下是我的脚本的相关部分:

Browser_Home::Send {Media_Next}
!Browser_Home::Send {Browser_Home} ; this one is ignored

我不知道这是由于 Logitech、AHK 的实现还是我的 AHK 脚本中的逻辑错误(很可能)。

答案1

您是否尝试过组合热键方法?

; $ = Force keyboard hook such that Send command won't trigger itself
; * = Prefix to allow firing with any other hotkey combination as long as that key is pressed

$*Browser_Home::
    If GetKeyState("Alt", "P")  ; See if user is holding the Alt key down
        Send {Browser_Home}
    Else
        Send {Media_Next}
Return

或者使用三元运算符组合:

$Browser_Home::Send, % GetKeyState("Alt", "P") ? "{Browser_Home}" : "{Media_Next}"

我不知道这是否真的有效(即未经测试),只是想尝试一下。

有时,当您使用组合热键时,通过MsgBox在各个测试用例中添加语句来查看哪些语句正在执行或未执行,可以更轻松地调试出错的地方,然后如果它们似乎执行了(例如,对于特定的发送语句),然后您可以通过托盘图标查看击键日志,看看实际发送了什么,或者可能由于热键语法或其他原因而被忽略/阻止(如果它是无意中设置的,导致 AutoHotkey 阻止了您希望它发送的内容)

答案2

*Browser_Home::
GetKeyState, OutputVar, alt , P
if(OutputVar = "D")
{
    ;~ MsgBox,  alt down %OutputVar%
    Send {Browser_Home}
    sleep, 250
}
else if(OutputVar = "U")
{
    Send {Media_Next}  
    sleep, 250
}
return
*Browser_Home up::
sleep, 50
return

我希望这能有所帮助(时间由你决定)或

Browser_Home::Send, {Media_Next}
Alt & Browser_Home::send, {Browser_Home}

相关内容