Windows で Natural Scrolling

Windows で natural scrolling を実現する方法はいろいろあるようですが、私は AutoHotKey で以下のようなスクリプトを書いて実現していました。

WheelUp::
 Send {WheelDown}
 Return

WheelDown::
 Send {WheelUp}
 Return

これで最近までは特に問題なく使用できていたのですが、最近利用し始めた Synergy との組み合わせで困ったことになりました。

私は Ubuntu を Synergy のサーバ、Windows を Synergy のクライアントにして利用しています。
つまり、Ubuntu のマシンにつながっているキーボードやマウスを使って Windows マシンの操作ができるようにしています。
そして Ubuntu では Ubuntu Tweak を使って natural scrolling になるようにしています。

すると、Ubuntu(Synergy サーバ)がマウスホイールのイベントを Windows(Synergy クライアント)へ送信するときにすでに Up/Down が逆転しているものを、Windows 側では AutoHotKey が拾ってさらに逆にしてしまうので結局元に戻ってしまっていたのでした。

AutoHotKey による Up/Down の逆転を無効にすると、Synergy 経由での操作は解決するのですが、Windows マシンに物理的に接続されているマウスを使用しての操作は natural scrolling ではなくなってしまいます。

これを解決するには、Windows マシンに物理的に接続されているマウスからのイベントだけ Up/Down を逆転するようにしなければなりません。

その解決方法を見つけました。レジストリをいじる必要があります。

以下、設定手順です。

  1. Windows マシンに物理的に接続されているマウスの ID を調べる
    1. コントロールパネルを開く
    2. [マウス] を開く
    3. [ハードウェア] タブを開く
    4. [デバイス] の一覧の中から、変更対象とするマウスを選択する
    5. [プロパティ] ボタンを押す
    6. [詳細] タブを開く
    7. ドロップダウンリストから [ハードウェア ID] を選択する
    8. その HID\VID_xxxx&PID_xxxx という文字列をメモしておく
  2. レジストリエディタでレジストリを書き換える
    1. regedit を起動する
    2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\HID を開く
    3. 先程メモした VID_XXXX&PID_XXXX というフォルダがあるはずなのでそれを開く
    4. 数字や & 記号の羅列の名前のフォルダがいくつかあるはずなのでそれぞれ開く。
    5. それぞれの中に FlipFlopWheel という値があるはずなので、編集して 0 を 1 にする
    6. レジストリエディタを閉じる。
    7. レジストリの変更を反映させるため、USB マウスならば一旦取り外し、再度接続する。もしくは Windows を再起動する。

これで AutoHotKey スクリプトを動かさなくてもマウスホイールが反転するはずで、しかもその設定したマウスのイベントしか反転させないので Synergy 経由の時はサーバ側で反転されたイベントがそのまま届くことになるので Synergy 経由でも、直接操作でも、どちらの場合でもうまく動くようになるはずです。

マイクロソフト ブルートラック 有線 マウス Comfort Mouse 6000 S7J-00014

マイクロソフト ブルートラック 有線 マウス Comfort Mouse 6000 S7J-00014