Winキーを再マップしてショートカットを無効にする

Winキーを再マップしてショートカットを無効にする

目的はゲーム用であり、Winkey を他のキーに再マップして、Winkey を押してもスタート メニューが表示されないようにし、ゲーム中に Winkey + e (explorer.exe を開く) などの Winkey ショートカットを無効にしたいと考えています。

これまで試してみたのは以下のとおりです:

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

再マッピングはゲームによって認識されず、Lwin は Lwin として扱われますが、スタート メニューはブロックされ、これは私たちが目指していたものの半分に過ぎません。

しかし、 を押したままにすると、意図しないキーが開きます。Winkeyこのe手順でキーとキーが押されていることを望みます。explorer.exepe

これを達成した AHK の専門家はいますか?

次のようにショートカットをブロックしてみました:

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

しかし、キーのみが送信されpeキーは省略されます。

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

WindowsキーはAutoHotkeyで再マッピングするのに問題のあるキーです。これは、WindowsがWindowsキーが押されたことを認識するのを実際に防ぐことができないためです。スタートメニューが開かないようにするために、追加のシミュレートされたキーストロークを送信する必要があるゲームにおける信頼性の最も確実な方法は次のとおりです。

まず、SharpKeys を使用して、F15 などのキーボードに存在しないキーにキーを再マップします。次に、ゲーム中の場合とそうでない場合でこのキーを別々に再マップします。

#IfWinActive ahk_class LWJGL
    F15::p
#IfWinActive

#IfWinNotActive ahk_class LWJGL
    F15::LWin
#IfWinNotActive

(再マッピングの場合や、ホットキーで 1 行のみ実行する必要がある場合は、 return ステートメントは必要ありません。)

答え2

必要なのはキー自体を再マップすることだけです。LWin キーの組み合わせを再マップする必要はありません。

#IfWinActive ahk_class LWJGL
    LWin::p
#IfWinActive

を使用すると、LWin & e::eこれを「e」に再マップします。したがって、修飾キーはすべて渡されます。この場合、Win キーは渡されるため、 になりますWin + E

すべての修飾キーが、押すキーに影響を与えることに注意してください{blind}。たとえば、キーを「e」に再マップし、大文字にしたい場合は、「Shift」キーを押しながら「再マップされたキー」を押すことになります。

また、キーの再マップでは、Send, {DownR}キーボード ショートカットで使用するためにキーを物理的に押すのと同様の効果を持つメソッドが使用されることに注意してください。

関連情報