道具箱マウスチルトで水平スクロール http://www.rainylain.jp/tools/mousehwheel/ 開発室BBS
チルトホイール付きマウス

読み物的な内容をスキップしたい方はここをクリックして下さい。

【まずはマウスの解説】

左絵のマウスの赤い部分、ぐりぐり回すホイールです。上下に回せばブラウザの画面などが縦にスクロールしていきます。最近はこれが無いマウスはさすがにないと思いますが、この部分を左右に傾斜するスイッチが付いている物も中にはあります。ロジクール(logicool)社製マウスの場合はこの絵の様に<>というような刻印が印字されています(Microsoft社製は刻印がないようです)。これをチルト(tilt=傾ける)ホイールと言います。

発音が「てぃると」じゃないかという突っ込みは置いといて、各社のカタログでマウスのスペックを調べる場合、「チルト機能」が明記されているかどうかを確認します。チルト機能がある一番シンプルなものですと「総ボタン数」は5個となっていて、左クリックボタン、右クリックボタン、ホイールボタン(傾けずに押し込む)、ホイールの左傾斜ボタン、ホイールの右傾斜ボタンの計5個という様に数えます。さらに多機能ですとマウス側面にもボタンが2個以上ついていて7ボタンマウスとか言われます。

【チルトホイールの機能】

さて、このチルトホイールですが左右傾斜押しで何が起きるかというと、以前は水平スクロールするものもありましたが最近はブラウザの「戻る」(左傾斜押し)、「進む」(右傾斜押し)になっているものが多いようです。7ボタンマウスの場合はこれらの戻る進むがマウス側面のボタンの方に振り当てられていて、チルト側は水平スクロールという感じです。

なぜ水平スクロールからブラウザの戻る進むになったのかは定かではありませんが、実は水平スクロールが実際に機能するアプリが思ったより少なかったからではないかと推察しています。マウスのホイール自体が途中から普及しだしたということもありますが、マウスという比較的低価格なアイテムではわずか数百円でもコストダウンしたい為かチルト機能がないものも多く、水平スクロールの動作に対応するようにアプリを作る手間が省かれたものが多いのか「動かない」というクレームが出ていたのかもしれません。水平スクロールバー自体はWindows初期のころから当たり前のようにありましたが、こういった経緯もあり確実に動作するブラウザの戻る進むに落ち着いたのでないかと思います。

かく言う私もロジクールのM505というマウスを使っていて水平スクロールを便利に使用していましたが、長年の使用でクリックの調子が悪くなり(いわゆる「チャタリング」が頻発してドラッグすら難しい)、新しくM325というマウスに買い替えました。

ところが、、、、

「水平スクロールしないじゃん」となったわけです。確かにメーカーのHPには“ウェブ用ホイール”だのよく読めばブラウザの戻るとか、小さい字でうたい文句が書かれていて「あぁ、そういうことか失敗したかな」と思いました。チルト機能の有無にだけ気を取られていたんですね。

【ブラウザの戻ると進む】

ところで、ブラウザの「戻る」と「進む」、使用していますか?

たんなるNEWS記事ならリンク先から戻っても問題ないかもしれません。でも戻らずにどことも知れず進むことはできません。それにページの進行が重要となるようなオンラインショッピングや何かの登録などでは戻られたら困る(状態管理がおかしくなる)ため、戻れないように必死に細工しているページもあります。最近はJavaスクリプトで凝ったページを表示しているためか戻ると妙に待たされたり表示がおかしくなるサイトもまれにあります。このためブラウザの戻るなんていらない、というか無くした方が良いのではとさえ思います。

【解決策の模索】

話は戻りまして、せっかく新しく買ったマウスなのに「残念」で終わらせるのは悲しいので解決策を模索してみました。最終的にチルトホイールでブラウザの戻る進むの代わりに水平スクロールが出来れば成功となります。

マウスのプロパティ

最初に確認すべきはWindowsの自身の設定です。「コントロールパネル」から「マウス」を開きます。マウスのプロパティから「ホイール」タブを見てみると、“水平スクロール”という項目があります。ですがチルトでどのように動作するかを指定できそうにはありません。

ここにある設定項目の「ホイールの傾きで1度に次の文字数をスクロールする」をいくら変更しても何もおきません。これは水平スクロールする機能がマウスにあるかどうかに関わらず表示されています。(もちろんマウスにその機能があれば、設定どおりに水平スクロールの送り量が変化します)

次に少し専門的にはなりますが、レジストリをいじれば何とかならないかという疑問です。詳しい方ならキーボードのキーアサイン(どのボタンを押せば何という文字が入力されるか)をレジストリで変更できる、またはキーアサイン変更アプリなどの存在を知っているかもしれません。同じようにマウスも出来ないか調べてみましたが、残念ながらマウスのキーアサイン変更は不可能のようです。もちろん、単純に右傾斜(X1ボタン)の動作を指定するレジストリキーなんてものもありませんでした。

【メーカーのHPでツールをダウンロード】

ロジクールなら「SetPoint」というアプリがメーカーのホームページからダウンロード出来ます。同様にMicrosoftなら「IntelliPoint」があります。最初からメーカーのツールで良いと思える方はダウンロードしてみて下さい。双方多機能で水平スクロールを可能にする設定どころか、まったく別の機能(例えば特定のアプリを起動するとか)も設定出来ちゃいます。

これで万事解決となれば良かったのですが、正直SetPointを使ってみて「う~ん...」となりました。Windowsへサインイン(ログイン)で自動的に起動するように設定できて水平スクロールも可能なのですが、なんか重いというか安心感がないんです。ログイン直後にSetPointが起動しているなぁという間がありますし、アップデートの自動確認(設定でOFFに出来ます)とか管理画面の表示の遅さとかが気になります。おそらく多機能にしすぎて巨大化したとかだと思いますが正直これはいただけません。一度きりの設定でアプリ終了ならまだ良いのですが、SetPointの場合ロジクール社製キーボードも使っているとセットでキーボードの設定も常駐アプリで常にいじられるというのは気持ち悪いというかセキュリティ的にもどうなんだろうという考えもあります。実在するかは不明ですがSetPointを狙って脆弱性を突きアップデータを乗っ取ったりキーロガー(キーボード入力を記録してパスワードなどを盗む悪意あるアプリ)を仕込まれたりは勘弁です。

【メモ】
2017年5月にヒューレットパッカードがオーディオドライバーでやらかしたようです。ボリューム等をキーボード操作させるための機能でキー入力をファイルに記録していました。これは開発側のミスとはいえ、こういうことも起こりうる例となってしまいました。
ITmedia:HPのPCにキーロガー? セキュリティ企業が指摘

また、SetPointの水平スクロールは動かないアプリに無理やり対応させたいが為かおかしな挙動もします。Internet Explorer(IE)で上下に分割されているフレームを使ったページなどをスクロールさせると、スクロールバーなどの部品ごと表示内容が横にスライドしてしまい元に戻らない(ページを開きなおせば治る)こともあります。SetPointではIEにアドオンを追加してスクロールを助けるモジュールがインストール時に導入されるのですが、それも状態を有効・無効設定できず未対応のようになっていて機能していないようでもあります。

そんなこんなで、有用というより弊害の方が気になるのでSetPointの利用は止めてアンインストールしちゃいました。それでも長年チルトで水平スクロールに慣れてしまっていたこともあり、ブラウザの「戻る」を間違ってチルトで押してしまうこともあるのでアプリを自作することにしました。

【マウスチルトで水平スクロールの技術的解説】

いきなり専門的な解説で申し訳ないのですが、これを書いておかないと思ったように水平スクロールしないとかExcelだけじゃなくてこれも対応してという話になってしまうのでご容赦ください。

ふだんマウスやキーボードを使ってクリックしたりキーボードのキーを押したりしてアプリを使いますが、これらはWindowsからアプリに対してメッセージが通知されることで成り立っています。例えば左クリックしたらWM_LBUTTONDOWN、離したらWM_LBUTTONUPというメッセージがアプリに通知されます。キーボードならWM_KEYDOWNといった感じです。ウィンドウを動かしたりボタンを押したりでもメッセージが飛び交います。

マウスでのスクロールは縦がWM_MOUSEWHEEL(ホールを回した)メッセージ、水平(横)スクロールがWM_MOUSEHWHEEL(ホイールを傾けた)が通知されます。ただ、前述のようにチルトでブラウザの「戻る」がおきるマウスではWM_XBUTTONDOWN(パラメータでXBUTTON1=左とXBUTTON2=右の区別)が通知されるようになっています。ホイールと違って左右傾斜はカチカチなるON/OFFスイッチなのでボタン扱いなんですね。7ボタンマウスなどマウス側面にもボタンがある物が最初でそれがチルトに割り当てされたという経緯もあるでしょう。

ちなみにこのWM_MOUSEHWHEEL(ホイールを傾けた)メッセージですがWindows Vista(2006年)から存在します。縦ホイールはXP以前のNT4.0(1996年)、マウス側面のボタンはWindows 2000(2000年)からあります。マウスでの水平スクロールはホイールの登場から見れば以外と歴史が浅いんですね。このためWM_MOUSEHWHEELの通知に対して水平スクロールできない(対応していない)アプリが多いのも分からなくはないです。実際にMicrosoftでさえExcelやWord側では対応せず、IntelliPointで強引にスクロールさせた所から変わってないです。このため各社マウスメーカーは「追加ドライバ」やSetPointなどの「ユーティリティ」で対応せざるを得なかったという経緯があります。

実際問題、水平スクロールをうたってマウスを売るにはアプリが対応してないからでは弱いので各社疑似的に水平スクロールを起こさせようと「追加ドライバ」や「ユーティリティ」で細工を施しています。簡単なところではキーボードの左右方向キーがあります。方向キーを押すことでInternet Explorer(IE)など基本的に文書を書くものではなく「見る」物が主体の場合水平スクロールできることが多いです。これを利用してチルトで方向キーを押したことにしてしまうというものです。

他にはもっと入り込んでアプリに直接横スクロールメッセージ(WM_HSCROOL)を送り込んでしまうという方法もあります。しかしこれは本当に強引な手法で過程となる処理も幾分かかりますし(動作に極微妙な影響)、そもそもアプリ側が想定していない事を裏から操作するのでどんな影響が出るか分かりません。前述のSetPointでInternet Explorer(IE)の分割フレームが横スライドしてしまった件はこれかもしれません。

Windowsは、だいたいこんな感じで発売されています。
XP時代が長かったことが有名ですね。2000~XPのころに現在も受け継がれるアプリの多数が開発され始めた感じでしょうか。

Windows NT4.0 1996年 OSにホイール定義が追加される
Windows 2000 2000年 OSにマウス側面用のボタン定義が追加される
Windows XP 2001年  
  2003年 秋にMicrosoft社からチルト付きスクロールマウスが発売される(IntelliPointで水平スクロールに対応した)
Windows Vista 2006年 OSにマウスによる水平スクロール定義が追加される
Windows 7 2009年  
Windows 8 2012年  
Windows 10 2015年  

【マウスチルトで水平スクロールを自分で実現するための開発主眼】

さて、これら「重い&何やってるのか分からん」ものはシステムを不安定なものにしてしまう恐れもありますし、そもそも大げさです。アプリが水平スクロールメッセージで動こうが動くまいがお構いなしで単純に原点回帰したいと思います。やりたいことはチルトボタン押しでWM_XBUTTONDOWNではなくWM_MOUSEHWHEELが通知されるように変更することだけです。

ただ、実際に使用してみて頻度の高いExcelだけは水平スクロール出来ないと不便だと感じましたので、そこだけはキーボードでもできるスクロール方法「ScrollLock」キー押してからの左右方向キーでスクロールするオーソドックスな手法を取り入れてみたいと思います。これなら不安定にしてしまう恐れも無いですしね。

キーボードに「ScroolLock」キーなんて見当たらないという方、最近は使用頻度が極端に低下しているためか端折った刻印になっている場合が多いです。色の付いた「Fn」キーを押しながらみたいな絵が刻印されているキーを押すというのもあります。

また、多機能化を否定している以上、設定画面だのアップデートの確認だのは極力省きます。必要なのは常駐アプリにせざるを得ないので自動起動の設定と困った時に配布元が分からなくならないようにする為のバージョン情報ぐらいでしょうか。

そしてここまで単機能化すれば疑いもなくアヤシイ挙動は埋め込めないという利点もあります。詳しい方、APIのロード情報とかプロセス情報とか調べてみてください。通信もファイル操作もしてませんので安心です。