重新映射 Winkey 并禁用其快捷方式

重新映射 Winkey 并禁用其快捷方式

目的是为了玩游戏,我想将 Winkey 重新映射到其他键,这样当我按下它时“开始菜单”就不会弹出,并且我想在玩游戏时禁用 Winkey 快捷方式,例如 Winkey+e(打开 explorer.exe)。

这是我迄今为止尝试过的:

#IfWinActive ahk_class LWJGL
    LWin::p
    return
    LWin & e::e
    return
#IfWinActive

游戏无法识别重新映射,Lwin 被视为 Lwin,但开始菜单被阻止,而这只是我们所期望的一半。

但是,如果我按住然后Winkeye会打开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重新映射Winkeyp

答案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}方法具有与使用键盘快捷键时物理按下键类似的效果。

相关内容