予想どおり、すべてのマウスの2つの追加ボタンは、XBUTTON1およびXBUTTON2メッセージを送信します。ただし、Sculptエルゴノミックマウスでは、Windowsボタンはこれを送信しません。どうやらそれは正しいWindowsキーを送信します。 XBUTTON2を送信するように修正する必要があります。
これに従うことで、Windowsボタンが何もできないようにすることができました: Microsoft Sculptモバイルマウス(Windowsキー)を再バインド -しかし、これはマウスのWindowsボタンを完全に無効にし、次のように機能しません通常、他のすべての5ボタンマウスと同じです。 XBUTTON2
を送信する必要があります。
ただし、XBUTTON2として機能するために必要です。
私はソフトウェア開発者です。 Sculptエルゴノミックマウスは5つのボタン(および水平スクロール)があるため購入しました。これにより、すべてのボタンメッセージをテストできます。特に、タイプ/マウスを離している間、快適に保つのに役立ちます。
マウスフックのボタンメッセージは次のとおりです。 https://msdn.Microsoft.com/en-us/library/windows/desktop/ms644986.aspx
MouseDataフィールドは、マウスボタンに従って設定されます。
WM_LBUTTONDOWN
WM_RBUTTONDOWN
WM_MBUTTONDOWN
WM_XBUTTONDOWN
そしてMSLLHOOKSTRUCT構造に表示されます: https://msdn.Microsoft.com/en-us/library/windows/desktop/ms644970.aspx?f=255&MSPPError=- 2147217396 -そのmouseDataフィールドはXBUTTON1
ですWM_XBUTTONDOWN
のmouseDataでメッセージXBUTTON2
を送信することを期待しています(2に注意してください)箇条書きを説明する図は次のとおりです。
緑の矢印とテキストクラウドは、それがどのようであるかを示しており、それが私が期待していることです。赤い矢印とテキストクラウドは、Windowsのマウスボタンに期待することですが、そうではありません。誰かがこのWindowsマウスボタンをwinapiの観点から期待どおりに機能させるのを手伝ってくれますか?
「WIN」キーをリッスンしています
私の知る限り、「WIN」マウスキーからのイベントが表示されない唯一の理由は、マウス関連のイベントのみを表示しているのに対し、「WIN」キーはキーボード関連の「右」を生成するためです。 -Win」キーストローク。事実上、この部分はすでに コメントで説明されています –「Right-Win」の再マッピングは完全に機能します。
繰り返し送信されるRWinイベント
イベントを繰り返し送信していることが確認できます。 AFAIK、すべてのキーボードキーはこのように機能します-例: 「F2」。少なくとも次の [〜#〜] ahk [〜#〜]trick は、私が知る限り、「F2」と「RWin」の両方で事実上同じことを示しています。
#InstallKeybdHook
#InstallMouseHook
1::KeyHistory
「WIN」キーの良いところは、機械的に単一のキーストロークを生成できることです。ホイールの傾きとは対照的に、ホイールの傾きから「シングルクリック」を得るのは非常に困難です。私の最短のクリックでさえ、通常3〜5回の個別のキーストロークとして扱われます。
ホイールチルトキーを聞く
「Microsoftマウスとキーボードセンター」(バージョン2.7.133.0)は、マウスの動作を変更しているようです。AHKはWheelRight/WheelLeftイベントを聞くことができなくなりました。 これを修正する最も簡単な方法 は、Microsoftのツールをアンインストールすることです。ただし、私の実験によれば、「WIN」キーには影響しません。
ただし、アンインストールしなくても、ホイールの傾きを再マップすることは可能です。 [〜#〜] ahkhid [〜#〜] 例1と2を使用することにより、UsagePage 12、Usage 1を使用して、左右のホイールの傾きから1FFDFFと1F0300の「データ」を取得できました。 「Microsoftマウスとキーボードセンター」がインストールされていますが、アンインストールしても何もありません。
繰り返し送信されるホイールチルトイベント
個人的には、 Bobが提案 のように、単に遅延を導入することになりました。 この質問 のコードに基づくと、最も単純なコードのように見えます(この場合は問題なく動作します(ただし、最適ではない可能性があります-私はAHKの専門家ではありません)。次のAHKスクリプトを使用すると、Wheel-tilt-Leftを「Ctrl + Alt + leftArrow」に、Wheel-tilt-Rightを「Ctrl + Alt + rightArrow」に再マップできます。 VirtuaWin でこれらのホットキーを使用して、前/次の仮想デスクトップに切り替えます(「クリックごとに1つの応答」が非常に重要なタスク)。これは完璧に機能します。 (それでも、「チルトボタン」を押し続けると、1秒あたり最大5つのイベントが発生します)。
WheelRight::
if( not GetKeyState("WheelRight") )
sleep 200
Send, {LControl down}
Send, {LAlt down}
Send, {right}
Send, {LControl up}
Send, {LAlt up}
return
WheelLeft::
if( not GetKeyState("WheelLeft") )
sleep 200
Send, {LControl down}
Send, {LAlt down}
Send, {left}
Send, {LControl up}
Send, {LAlt up}
return
RWin::
Send, {Browser_Forward}
return
RWinは、このトリックがなくても問題なく動作します。
タイマーは、繰り返されるイベントを1つのアクションに減らすのに理想的です。キー/クリックを繰り返すたびにタイマー間隔をリセットするため、最終的にキー/ボタンを離すまでアクションは発生しません。
私はこのスクリプトをホイールチルトで使用します:
; Prevent warning if we hold a button too long
#MaxHotkeysPerInterval 200
~MButton & WheelRight::
SetTimer ArrangeWindowRight, -50
return
~MButton & WheelLeft::
SetTimer ArrangeWindowLeft, -50
return
ArrangeWindowRight:
Send #{Right}
return
ArrangeWindowLeft:
Send #{Left}
return
したがって、ArrangeWindowRightとArrangeWindowLeftは50msのみ呼び出されます後傾斜を解除します(タイマー間隔の負の符号に注意して、1回だけ実行します。それがないと、関数が何度も呼び出されます)。
I3vのコードに関しては、一見すると、last繰り返しイベント(sleep 200 if wheel is not pressed anymore
)の速度が低下しているように見えるので、そこで何が改善されたのか疑問に思います。また、5回の送信をSend ^!{Right}
に減らすことができます。
乾杯!