TrackWheel

TrackPointのスクロール機能はとても便利なんだけど、昨今の「タブ化」のご時世では中ボタンが使えないの厳しいし、ど真ん中にあるのにスクロールだけにしか使えないのはもったいない!でも、いちいちタスクトレイから切り替えるのも面倒だし、AHKでトレイアイコンを操作するスクリプトを使ってもいいけど一瞬メニューがでるし、何しろ1ステップ多いのが嫌だ!

と言う人向け。普通のマウスだとあまり便利でないかもしれない。 (マウスを普段使っていないので試してない)

サブページへのショートカット

機能概要

主機能

  • 中ボタンを押してマウスポインタを移動しようとすると、マウス移動量に応じて縦横スクロールを行う。
  • 中ボタンを押して一定時間以内(デフォルトの場合 300ms)の場合なら中ボタンクリックとなる

副機能

  • フォーカスが合っていなくてもスクロールさせることが出来る
  • ボタン押下地点に例のアイコンが表示される。
  • スクロール中マウスカーソルは見えない。
  • 操作対象別の動作調整が可能。
  • 互換ホイール(WM_VSCROLL)で動かしていても [Ctrl] or [Shift] 押下中は WM_MOUSEWHEELを送ることで拡大/縮小などが出来る

必要要件

少なくとも、以下が必要。

  • Autohotkey v1.0.48.00 以降(AutoHotkey_L、AutoHotkeyUでも同版以降なら可)
    駄目文字微対策版を利用している人は、新しいのを出してくれたぞ。ありがたくDLすること。
  • NT系の Windows OS (2000 とか XP で 多分 32ビット版でないと無理だと思う)。
Vista については分からない。

簡単な利用方法

単品利用の場合を記載する。


トラックポイントを無効にする
  1. トラックポイント等を利用して独自のスクロール機能を利用しているなら停止する
  2. アーカイブをフォルダ構成を維持して展開する
  3. 出来たフォルダの中にある TW.ahk をそのまま実行する
  4. 動作が気にくわないなら、同フォルダにある TW.ini を編集して、もう一度 TW.ahk を実行する。(特に停止したりしなくても良い)
  5. やめたいときはトレイアイコンをクリックして終了を選ぶ

ダウンロード

物置からどうぞ

設定の変更方法

はじめに

 メモ帳などのテキストエディタで設定ファイル(デフォルトでは TW.ini) を開く。そこに説明が書いてあるのでよく読んで編集する。編集が完了したら、スクリプトを再起動(トレイアイコンからでも同スクリプトの再度の実行でもどちらでも良い)。

基本設定

ここは 設定ファイル(デフォルトでは "TW.ini" ) の [connfig セクションをについて説明をする。

Hotkey
本機能を割り当てるホットキーまたはマウスボタン名を指定する。(デフォルトで MButton)。キー名についてはAutoHotkeyで割り当てられるホットキーなら何を指定してもよい。(「#S」や「^!Space」なども可)
Timeout
ボタンを押して離すまでの時間で、通常マウスクリックと判断する時間。ミリセカンド(1/1000秒)単位で指定する。 ここで指定した時間以内にボタンを離した場合は通常のマウスボタンクリックと同じ命令を送る。 超えた場合は、マウスクリック命令は送らない。
Icon
ボタンを押している間に表示されるアイコンのパス。
debug
デバッグモード用のフラグ。未指定または"0"を指定した場合は無効、それ以外は有効となる。
NoHide
有効(=1)にするとマウスカーソルを消去しない。動作が不安定なときに利用する。
DefaultS2
有効(=1)にすると、スクロール方法自動割り当てで Scroll ではなく Scroll2 をデフォルトとする。(V.5より有効)
SleepOnAlt
0以上の数値にすると、Altキー押下中は1回のスクロール毎に指定時間(ms単位)スリープする。拡大縮小やタブ切り替え等の時に便利かもしれない。(V.5より有効)
Bypass
バイパスコントロール設定。正規表現で指定する(エンジンはAHKのデフォルトのもの)。 詳細は次項以降を参照のこと。
QuitSendOnMove
この項に1を設定した場合は、Timeoutで指定した値よりも短い時間でボタン押上したときで、多少なりともスクロールした場合に元キーの送信を中断する。

デバッグモード


画像は開発中のものです
実際のものと確実に異なります

デバッグモードをOnにして機能を利用するとスクロール対象のクラス以外に以下の情報が取得できる。これをみて色々把握しないと設定が出来ないので頑張って理解してくれ。

①各方向へのスクロール方法

Wheel, Scroll, VKey のいずれかを選択したかと、 方向逆転(~)が表示される。(基本的に設定ファイルの文字列がそのまま出る)

②スクロール量の算出に必要な数値群

動作感度、動作閾値、ページモード閾値のそれぞれX軸、Y軸のものが表示される。未設定の場合はデフォルト値が出る。

③移動量とスクロール行数

X軸・Y軸のそれぞれの単位時間あたりの原点(ボタン押下座標)からの 移動量(dx/dt, dy/dt)とそれが行数に変換されたものが表示される。

上段の移動量は、②の数値群を用いて下段のスクロール行数に変換される。

スクロールスクロール対象の定義

 個別設定では、ウィンドウクラスとマウス直下のコントロールクラスで対象を確定する。「クラスって何?」って人は厳しい・・・。Window Spy でも見て欲しい。で、クラスで絞り込みをするんだけど、これは基本的に完全一致(大文字小文字は問わない)。「*」を利用することでワイルドカードとして利用できる。

  • Hoge (完全一致)→ Hoge, HOGE, HoGe, hoge にマッチ
  • Hoge* (先頭一致)→ Hoge, Hogehoge, HOGEhoge, HOge2 にマッチ
  • *oge* (中間一致) → Oge, Hoge, ogeX,  にマッチ

なお、後方一致は無い

V6からは、非クライアント領域(タイトルバーや閉じるボタンなど)に擬似クラスを設定するようになったので場合によっては便利になるかもしれない。

擬似クラス一覧
擬似クラス 説明
$_NoWhere デスクトップ上
$_Caption キャプションバー
$_SysMenu システムメニュー
$_Size サイズボックス
$_Menu メニューバー
$_HScrool 水平スクロールバー
$_VScroll 垂直スクロールバー
$_MinButton 最小化ボタン
$_MaxButton 最大化ボタン
$_Border 境界線
$_CloseButton 閉じるボタン

スクロール方法の変更

デバッグモードにすると、縦横各方向のスクロール方法が表示される。 スクロール方法は以下から選択する。

名称 方式 良点 欠点 補足
Wheel チルトホイール(横)、ホイールコロコロ(縦)、をエミュレートする。 対応しているアプリなら綺麗にスクロールする ここ2~3年に出たアプリでないとチルトは対応していない事が多い。 要はXP世代以前のアプリじゃ無理。逆にOSがXPでも FireFox3 や Google Chrome、OpenOffice3 のようにチルトエミュレートで動くものもある。
Scroll 縦横のスクロールバーをのサム(ドラッグできる"つまみ")を操作したことをエミュレートする。 ダイレクトにスクロールバーの位置を変える命令を送るので Scroll2 よりレスポンスが良い。 今のところ、ListView系や、特定のアプリケーション(Visio2003など)では動作しない。 「スクロールバーだけ動いている」状況に遭遇したらこの方式では動かないので、以下の "Scroll2" を利用すること。
Scroll2 縦横のスクロールバーの上下(または左右)の[▲][▼]ボタンを押したことをエミュレートする。 汎用性が高い(これで動かない場合は諦め)。Windowsのコモンコントロールは大抵これでOK。 [▲][▼]ボタンを押す命令を数度(ページモード閾値を上限とする)押すので、のでアプリケーションによっては反応が悪い。 マルチプラットフォーム(Java系とか)のアプリはたいがい駄目な事が多い。
LView リストビュー(エクスプローラのファイルなどのある部分)専用のスクロール方式。専用のメッセージを送信する。 ぬるぬるスクロールする。 標準のリストビューをカスタマイズした一部の特殊コンポーネントでは動作しない。 詳細表示の場合はスクロール速度が速すぎるかもしれない。
VKey Left/Right, Up/Down キーを押したことをエミュレートする。移動量に応じた加速はしない。 最終手段としては使える。 キャレット(文字入力カーソル)があるところではキャレットが移動してしまう。 スクロールバーが見つかった場合は VKey はそちらに送るので、多分キャレットは動かない。
上記以外 全くスクロールしない - 敢えて none とかにしてスクロールさせないのも手。(Dynamic Function を利用してる)

動作オプションの設定

動作オプションは複数項目の設定が可能であり、各項目は半角スペースまたはタブで区切って指定を行う。書式は以下の通り、「**」の部分には数値を指定する。数値は16進数表記(0x~)でも構わない。

A** S**
A**
スクロール加速をするかどうかを指定する。これを有効(A1)にした場合はスクロール量をマウス移動量に応じて指数関数的に増加させる。無効(A0 または未指定)な場合のスクロール量マウス移動量に正比例する。
S** または **(数値のみ)
スクロール動作時のオプションを定義する。以下の数値の合計値を記載する。(特に気にする必要はない。)
内容 補足
1 Scrollでのみ有効。スクロール動作中のドラッグエミュレートを抑止 Aサムをドラッグ中であることをエミューレートしない。Acrobat Readerなどの、「つまみ」をドラッグするとスクロールバー付近にサムネイル画像が出るようなものに効く。これをONにすると正常にスクロールしないものも多いので注意。
2 Scrollでのみ有効。スクロール動作中の最大値チェック時にページ量を考慮しない 通常スクロールバーは最大値・最小値・ページ量(行/列数)・現在位置があって、現在位置の取り得る範囲は(最小値)~(最大値ーページ量+1)となる。が、Excel のようにスクロールする度にどんどんスクロールバーの最大値が拡大していくようなものの場合は移動範囲が限られてしまう。これを有効にすることで、現在位置の移動範囲を(最小値)~(最大値)の間を移動するようになり、スクロール領域の自動拡大に適応できる。

動作内容(要は速度)の調整

これを理解する上で以下の数値が必要となる。よく読んで、適当に設定するように。

動作閾値 (TX, TY)

いわゆる「遊び」である。

小さな移動量でスクロールしていたらちょっと触れただけでもすぐに移動してしまい都合が悪い。 デフォルトでは X軸は10、Y軸は 1 を設定してある。 これにより縦スクロール中にあまり横スクロールをしなくて済む。

動作閾値は X,Y軸それぞれに値がある。更に、操作対象毎の設定も可能である。

この図では、X軸方向へは閾値を超えていないので、行数は0行と算出されれている。

動作感度(SX, SY)

移動量をどうスクロール量に反映させるかを計算する時に用いる数値である。 計算式は以下の通り。

つまり小さいほどピンキーで、大きいほど鈍い。(1 や 2 、逆に 100 や 200 だと実用にならないはず。)

※ 動作閾値を補正するのは、動作閾値を超えた瞬間に大きくスクロールしないようにするため

Ceil : 小数点以下切り上げで整数にする 

行数 = Ceil((移動量-動作閾値分の補正) / 動作感度

「ま、なんて単純!」と思ったアナタ。まーこんなもんですよ。 あと、見ても分かるとおり、0 を設定したらゼロ除算でこけますので注意。

ページモード閾値 (PX, PY)

これは "Scroll2" を利用したときのみに利用される数値である。 "Scroll2" を利用した場合どのような動作をしているかというと、 スクロールバーの[▲]を上で算出した行数分だけ押すのをエミューレートしている。

これが結構チマチマとしかスクロールしないし、多くの行をスクロールさせようとした場合には たくさんの命令をループで回して送らなければならないので重くなる。

で、なにを言いたいかというと、スクロールバーの「ボタン([▲][▼)」]や 「つまみ」(移動する棒状のやつ)以外の部分をクリックすると一気にページ毎の スクロールに変わるわけだが、それに切り替えるための閾値である。

デフォルトでは縦・横ともに8となっている。 8回以上[▲]押すくらいなら一気に1ページスクロールしてしまえ!ってことである。

バイパスコントロール設定


バイパスコントロールにハマったヤツら

通常、ボタン (Button) とかテキストトラベル (Static) なんつークラスは、どうせスクロールなんてしない。でもマウス直下にあると無視できない。

と言うわけで、これらの上位の(見た目上は下側に隠れた)コントロールに制御を渡したい。そんなときに使うのがバイパス。

設定ファイル内では Bypass に設定をするが、正規表現 での設定なので分からない場合はいじらぬが吉である。

この図ではうまいことにスクロールできるコントロールまでたどり着いている。というか、クラス名が長すぎて TrayTip が切れている。今気づいたが見なかったことにしよう...

既知の不具合とか、作者の能力の限界とか

スクロールしないところがある!

動かしかたが分かりません。設定を Wheel とか VKey にしてやってください。それでも無理なら諦めて...

別のスクロールバーに誤爆してる!

多分Office系だと思う...。座標だけで割り出すのは限界が...

マウスポインタが消えないときがあるんだけど・・・

多分他のユーザのプロセス(スレッド)のはず。

ファイル名を指定して実行とかのダイアログのインクリメンタルサーチの部分はシステムプロセスだったり・・・

ボタン離しても例のアイコンが消えない / マウスが動かない...

大変危険な状態です。対象ウィンドウに色々メッセージを送っている最中にハングしているものと見られるので利用を止めましょう。スクリプトを実行しているプロセスを終了させれば元に戻るはずなので頑張って[Ctrl]+[Alt]+[Delete]などでキーボードでタスクマネージャを呼び出して該当プロセスを強制終了させませう。

その他

著作権とか...

  • どうでも良い、その代わりに何も保証しない。
  • 敢えて言えば、誰でもいじっていいし、制限なんて要らない。(添付文書を含む)
  • 用語を使えば、 Public Domain なのかなぁ

サポート?とか

  • 基本的にしない。趣味で作っているので。