目的是为了玩游戏,我想将 Winkey 重新映射到其他键,这样当我按下它时“开始菜单”就不会弹出,并且我想在玩游戏时禁用 Winkey 快捷方式,例如 Winkey+e(打开 explorer.exe)。
这是我迄今为止尝试过的:
#IfWinActive ahk_class LWJGL
LWin::p
return
LWin & e::e
return
#IfWinActive
游戏无法识别重新映射,Lwin 被视为 Lwin,但开始菜单被阻止,而这只是我们所期望的一半。
但是,如果我按住然后Winkey
它e
会打开explorer.exe
非预期的键,我希望在此步骤按下p
键和键。e
有没有 AHK 专家已经完成过此事?
我尝试像这样阻止快捷方式:
#IfWinActive ahk_class LWJGL
LWin::p
return
Lwin & e::
return
#IfWinActive
但它只会发送p
密钥,而省略了e
密钥。
我也尝试使用如下Send
命令Up
:
#IfWinActive ahk_class LWJGL
LWin::p
return
LWin & e::
Send {LWin Up}
Send {e Down}
return
e Up::Send {e Up}
return
#IfWinActive
一切都已修复,只是该e
键本身不起作用(单独按下它不起作用,只有按下 LWin 然后再e
按下时才起作用)。请注意,第一个问题在这里也没有解决,这意味着 LWin 键未p
在游戏中重新映射。
我在这些脚本上测试的特定游戏是 Minecraft,但我也在 CS:GO 上测试过它,并且 LWin 键没有重新映射到p
,它仍然被视为 Winkey。在 Notepad.exe 或其他非游戏程序上情况并非如此,LWin::p
重新映射Winkey
到p
。
答案1
在 AutoHotkey 中,Windows 键是一个有问题的键。这是因为它实际上无法阻止 Windows 看到 Windows 键被按下,因此它需要发送额外的模拟按键来防止打开开始菜单. 游戏中可靠性的最佳选择如下:
首先使用 SharpKeys 将按键重新映射到键盘上不存在的按键,例如 F15。然后针对您在游戏中和不在游戏中的情况分别重新映射此按键:
#IfWinActive ahk_class LWJGL
F15::p
#IfWinActive
#IfWinNotActive ahk_class LWJGL
F15::LWin
#IfWinNotActive
(当重新映射或热键仅需执行一行时,您不需要返回语句。)
答案2
您需要做的就是重新映射按键本身,而不需要重新映射 LWin 按键组合。
#IfWinActive ahk_class LWJGL
LWin::p
#IfWinActive
您LWin & e::e
将它重新映射到“e”。因此,所有修饰键都会通过。在本例中,Win 键通过,因此您得到Win + E
。
请注意,允许{blind}
所有修饰键影响您按下的键,因为如果您将某个键重新映射到“e”,并且希望将其大写,则您需要按住“Shift”并按下“重新映射的键”。
还要注意,键重新映射使用的Send, {DownR}
方法具有与使用键盘快捷键时物理按下键类似的效果。