重新映射 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密鑰。

我還嘗試使用以下命令SendUp

#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

Windows 鍵是在 AutoHotkey 中重新對應時有問題的按鍵。這是因為它實際上無法阻止 Windows 看到 Windows 鍵被按下,所以它需要發送額外的模擬擊鍵以防止打開開始功能表。保證遊戲可靠性的最佳選擇如下:

首先使用 SharpKeys 將按鍵重新映射到鍵盤上不存在的按鍵,例如 F15。然後根據您在遊戲中和不在遊戲中的情況分別重新映射此鍵:

#IfWinActive ahk_class LWJGL
    F15::p
#IfWinActive

#IfWinNotActive ahk_class LWJGL
    F15::LWin
#IfWinNotActive

(重新映射或熱鍵只需要執行一行時,您不需要 return 語句。)

答案2

您所需要做的就是重新映射按鍵本身,無需重新映射 LWin 按鍵組合。

#IfWinActive ahk_class LWJGL
    LWin::p
#IfWinActive

隨著LWin & e::e您將其重新映射為“e”。因此任何修飾鍵都會被傳遞。在這種情況下,Win 鍵正在傳遞,因此您得到Win + E

請注意,您{blind}允許所有修飾鍵影響您按下的鍵,因為如果您將一個鍵重新映射到“e”,並且您希望它大寫,您將按住“Shift”並按下“重新映射的鍵” 。

另請注意,按鍵重新映射使用的Send, {DownR}方法具有類似於實體按下按鍵以與鍵盤快捷鍵一起使用的效果。

相關內容