ThinkPadのトラックポイントと中ボタンをWindows上で快適に使うための設定

#前書き: 長いので飛ばしてOK

ThinkPadの最大の魅力はトラックポイントにあります（異論は認める）。
トラックポイントと左右中ボタンさえあれば、一日中コーディングしていてもそんなに指が疲れないので、ぶっちゃけトラックパッドなんて要りません（筆者は完全にタッチパッド無効化してますし、できることなら以前のThinkPadのようにタッチパッド無しのラップトップを作って欲しい）。
特に、中ボタン押しっぱなしでトラックポイントを動かした時にスクロールするという挙動は絶妙でしょう。
一方、主にWebブラウジング用途では中クリック（ホイールクリック）によるオートスクロールを使ったり、ブラウザに限らずタブ表示型のソフトウェアはタブの中クリックで閉じるという挙動が一般的で、意外と多用する機能ではないでしょうか？

ところが、Lenovoが提供しているWindows版の公式トラックポイントドライバであるSynaptics ThinkPad UltraNav ドライバー（以下、UltraNav）では、先述の重要機能である「中ボタンスクロール」と「中クリック」を択一式のオプションにしてしまい、二種類の挙動を両立できなくしています。

![screenshot1.png](https://qiita-image-store.s3.amazonaws.com/0/104262/62611d52-4c74-fbf5-c8ee-da7360b6ccd5.png "中央ボタン動作として択一のオプションを迫られる。なお、タッチパッドは常時無効化がジャスティス")

開発者が何を思ってこの様な仕様にしたのか分かりませんが、二つの挙動は「中ボタンを押しっぱなしにしているかどうか」という決定的な違いがあるので明らかに棲み分けして両立可能なはずで、事実としてLinux等で採用されているGUIシステムXorgでは入力ハードウェア設定（xinput）で両立可能ですし、最近のディストリビューションはThinkPad関連の入力デバイスを自動認識して、最初から二通りの使い方ができるようになっています。
ThinkPadにUbuntuを入れたら、最初から快適に使えるんです。

筆者もThinkPadはUbuntuでの運用が多く、この場合はこれといった不満は無いのですが、MS Officeのファイル編集が必要な時であったり、どうしてもWindowsでないと困る用途もあるため、Windows/Linuxのデュアルブート環境を構築していますが、とにかくWindows運用する度にストレスが蓄積される問題がありました。
ちなみに、スペック（特にRAM）が十分であればUbuntuからVirtualBoxで仮想的にWindowsを使う場合も、ポインティング処理はホストであるUbuntu側で行っているのでゲストのWindows側でもいい感じに処理してくれますが、搭載RAMが4GB以下だったり、ちょっと古いCPUで仮想化支援が微妙な場合にはゲストがシームレスに動かないので、やっぱりストレスです。

では、ThinkPadでWindows運用する場合には、「中ボタンスクロール」「中クリック」を両立できず、どちらかを諦めるしかないのでしょうか？
（どちらかしか選べないのなら自分はスクロールを選びます）
実際はもちろん必要に応じて変更可能ですが、その都度にコントロールパネルからポインティングデバイスの設定を開くのでは無駄が多すぎます。
これは、公式ドライバの問題なので、Linux版みたいな非公式ドライバなら可能だろうか、とも考えられますが、筆者が見た限りではWindowsで使える非公式の代替ドライバというのは見つけられなかったですし、あったとしても使うのは推奨できません。
自暴自棄になって「こんなドライバ消してしまえ！」とアンインストールすると、中クリックのみの動作になってスクロールできなくなります。

じゃぁどうするのか、検索してみたらすぐ見つかりました。

"Lenovo W540 Trackpoint/Middle Mouse"
http://forum.thinkpads.com/viewtopic.php?t=113814
質問の内容はまさに、本投稿の議論である「中ボタンスクロールと中クリックの切り替え方じゃなくて、両方使える方法を教えてくれ！」ということです。

そしたらすぐに回答が。

"TPMiddle"
http://users.v-lo.krakow.pl/~mwrobel/programs/tpmiddle.html
「TPMiddleってソフトがまさにそれを実現してくれるで」とのこと。

はい、解決。

どうやらこのTPMiddleというソフトはデーモン（常駐ソフト）として動作し、Synapticsが提供しているUltraNavのAPIを叩いて、中ボタンの押下時間に応じて二つの挙動を場合分けしてくれるという非常にシンプルかつ正攻法な実装らしいです。
TPMiddle以外にもAutoHotKeyというキーバインディング（マウス状態も含む）監視・定義ソフトを使う方法もあるみたいですが、不要な機能がいっぱいあるように感じて使いにくかったので使ってません。

というわけで、本題に入ります。

#本題: TPMiddleのオススメ設定

要するにTPMiddleを適当なディレクトリに入れて自動起動するだけの設定ですが、以下のような手順で導入するのがオススメです。
(以下のスクリーンショットはThinkPad T460sとWindows 10で動作を確認しながら撮ったものです）

1. 「コントロールパネル」→「ハードウェアとサウンド」→「マウス」と辿り、「ThinkPad」タブを開く
2. 「中央ボタン動作」の項目で、「スクロールに使用する」を選択（あるいは既に選択されていることを確認）。こちらが選択されていないとTPMiddleを導入しても正しく動作しない模様。
![screenshot5.png](https://qiita-image-store.s3.amazonaws.com/0/104262/4e76cac5-6056-ff39-90c5-604891d551dd.png)
3. 公式サイト（と思われる） http://users.v-lo.krakow.pl/~mwrobel/programs/tpmiddle.html を開き、tpmiddle-0.6.exe をダウンロード
4. （もしまだインストールされていなければ）同サイトからVisual C++ 2010 SP1 ランタイム (32bit版)をダウンロードし、インストーラを起動してインストール。TPMiddleが32bit版しか動かないみたいなので、ランタイムも64bit版では動きません
5. 3.でダウンロードしたEXEファイルを、適当なフォルダに配置。筆者の場合、C:\Softwares\TPMiddleというフォルダを作ってそこにEXEを放り込みました。どこでもお好きな場所に配置すればいいと思いますが、ダウンロードフォルダにそのまま置いておくのはオススメしません
6. 「Windowsキー+R」コマンドで、以下のような「ファイル名を指定して実行」プロンプトが現れます
![screenshot2.png](https://qiita-image-store.s3.amazonaws.com/0/104262/9daf30ee-4c1a-d97f-3821-b89655ce056e.png)

7. 記入欄に「shell:startup」と記入しエンター
![screenshot3.png](https://qiita-image-store.s3.amazonaws.com/0/104262/ee1e5b08-7a3a-22fd-4877-80560f22142e.png)

8. 自動起動するソフトをユーザー毎に指定するためのフォルダがエクスプローラーで開かれるはずです。パスは一応、環境依存のはず
![screenshot4.png](https://qiita-image-store.s3.amazonaws.com/0/104262/e3f9fc6c-2274-8ad7-0fa6-1fdc8175243b.png)

9. 5.でEXEを配置したフォルダで、EXEファイルを右クリック→「ショートカットの作成」で、「tpmiddle-0.6 - ショートカット」とかいうファイルが作成されるはず。これをカット(Ctrl+X)して、6.のフォルダに貼り付け(Ctrl+V)する。このままでもいいけど、「tpmiddle-0.6 - ショートカット」というファイル名はイケてないので「tpmiddle-0.6」に戻すのが良いかと。

10. 準備OK。再起動する

11. これで、うまくいけば中ボタンスクロールと中クリックが両立できる状態になっているはず。ブラウザなどで挙動を試してみる

12. もし11.でうまくいかなかった場合、念のため新しいUltraNavを入れて再起動。http://support.lenovo.com/jp/ja/downloads/ds103454 などからダウンロードするといいです。

いかがでしたでしょうか？
一応筆者はラップトップはThinkPad E130、T460s、Helix (2nd)などで、OSはWindows 7、8.1、10などの組み合わせで試してみましたが、どれもうまく動いているのを確認できました。

注意事項として、今回導入したTPMiddle version 0.6は、2014年1月にリリースされたもので、そんなに新しくありません。
そしてTPMiddleでググると、TPMiddle version 0.7など、より新しいバージョンのものが見つかるのですが、実はこれは罠で、うまく動きません。
ドライバとAPIのバージョンの不整合なのか原因はよく分かりませんが、とにかく筆者の環境ではどうやっても0.7では動かず0.6では動くという状況だったので、素直に0.6を利用することをオススメします。

# 追記 (2019/02/18)

この記事も随分古くなってきました。
一応、この記事の内容で、今でもThinkPad中ボタンのクリックとスクロールを両立は可能なのですが、古くてお世辞にも使い勝手のよいとは言えないソフトを使い続けるのは得策とは言えません。
実は、同様の機能をより容易に実現できるツールを開発されている日本人がいらっしゃることを、この記事を書いた後に知りました。
（ThinkPad用に開発されたわけではなく、トラックボールやマルチボタンマウスのボタンを有効活用して、スクロールエミュレーションなど様々な機能に対応させたもののようです？）
W10WheelとW10Wheel.NETというツールなのですが、W10WheelはJava製でJavaランタイムが、W10Wheel.NETはC#製でVisualStudioランタイムがそれぞれ必要なようで、最近のWindowsで使うなら後者を利用する方が利便性が高いと思います。
私も既にこちらのツールへ移行しております。

https://github.com/ykon/w10wheel.net

こちらのツールの利用に関して、別途記事を作成しようかと思ったのですが、Qiitaで既に記事を書いている方がいらっしゃるようですので、そちらへリンクさせて頂きます。
（管理者権限での自動起動設定なども紹介されている良記事です）

https://qiita.com/mono1729/items/053514fad59f231706bf