![将 Alt+Key 重新映射到同一个键不起作用?](https://linux22.com/image/1546973/%E5%B0%86%20Alt%2BKey%20%E9%87%8D%E6%96%B0%E6%98%A0%E5%B0%84%E5%88%B0%E5%90%8C%E4%B8%80%E4%B8%AA%E9%94%AE%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
这是我现在的键盘,Logitech K270:
我想覆盖Browser_Home这样的:
- Browser_Home>>>Media_Next
- ALT+ Browser_Home>>>Browser_Home
虽然第一次重新映射有效,但第二次却无效,并且ALT+Browser_Home被Media_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}