その37.Windows標準のポインタ(カーソル)速度の変遷
2006/8/14
←その36に戻る 最初のページに戻る その38に進む→
 Windowsの標準状態(特別のドライバなどを入れていない状態)では、マウス(およびそれに類するポインティングデバイス)から送られてくる信号のうち、X軸・Y軸それぞれで-128から127までの整数によりポインタの移動が行われます。
 入力値に対して係数を掛ける・しきい値でその係数を変える事で、ポインタの速度・加速を調整して実際の画面上のポインタ動作となりますが、それらの調整はマウスのプロパティで行います。そしてその調整の値はレジストリに保存されています。
 Windowsのバージョンによりプロパティで調整する項目および挙動が変化しています。この項ではそれらの挙動を関連するレジストリの値を含めて纏めてみました。
 なお、調査したのはWindows95以降の主要なWindowsのうち、自分の所で動作環境が残っているものか、あらためてインストールしたものを、現在(2006年)時点で確認しています。そのため、初期の状態を100%再現できていない可能性もありますので、ご注意下さい。

1.Windows95



 Windows95ではカーソル速度は7段階のスライダで調整します。
 カーソル速度に関連するレジストリの値は、以下の3つになります。

MouseSpeed ・・・加速の度合い。
 値は0,1,2です。
 0の場合、入力値がそのまま出力値となります(加速なし)。
 1の場合、カーソル入力値がMouseThreshold1の値以上になると出力値が2倍になります。
 2の場合、2倍になる入力値は1と同様で、加えてカーソル入力値がMouseThreshold2の値以上になると出力値が4倍となる。

MouseThreshold1・・・加速の閾値その1。
 MouseSpeedの値が1,2の時、カーソル入力値がこの値以上になると2倍にして出力します。

MouseThreshold2・・・加速の閾値その2。
 MouseSpeedの値が2の時、カーソル入力値がこの値以上になると4倍にして出力します。
 常識的にはMouseThreshold1より大きな値を設定します。

 スライダの各段階で、これらの値の状態を表にまとめてみると、以下のようになります。
Win95のポインタ速度調整
レジストリ項目 min ← 7段階 → max
MouseSpeed  0  1  1  1  2  2  2
MouseThreshold1  0 10  7  4  4  4  4
MouseThreshold2  0  0  0  0 12  9  6
 スライダ位置をを速くにするほど、小さな入力値で加速が掛かるという挙動になります。
 グラフにしてみると、以下のようになります。
 なお以下のグラフは全て実測値で、横軸が入力値で縦軸が出力値になります。入力値は1から32までを表示しています。



 余談ですが、この時期の裏技で、レジストリ値をそれぞれMouseSpeed:2、MouseThreshold1:0、MouseThreshold2:0にする(レジストリを直接編集する)と、出力値が常に×4になる、というマウスカーソル高速化の方法が編み出されていました。

2.Windows98SE
 *)無印のWin98は環境を作るのが少し面倒なので飛ばします。



 Windows98SEではカーソル速度は7段階のスライダで調整します。
 その挙動はWindows95の場合と同じなので、省略します。

 ただし、標準のプロパティからは操作できませんが、Windows98SEにおいて、ポインタ速度を司るレジストリ値が増えています。

MouseSensitivity・・・入力値に掛ける係数を変化する。
 値は1〜20で10の時に入力値=出力値となり、数字の大小により係数が変化します。
 数字自体が係数ではありません。

 このMouseSensitivityは、その後のWindows2000からポインタ速度の調整で使われるようになるのですが、Windows98の時点でもレジストリ値を作ると同様に挙動します。
 しかし、出力値が128を超えるとマイナスの数値を出力してしまうという不具合があった関係か、試しに作ったものの実装を見送られた機能なのではないかと思います(あくまで自分の想像です)。

 極端な例として、MouseSensitivityの値が20の場合入力値に×3.5したものが出力値になりますが、それにポインタ速度のスライダで各段階を見たのが下の表になります。
 実際にはこの設定ではポインタが速すぎて、誤動作が無かったとしても操作には非常な困難が伴います。



3.Windows2000



 Windows2000では、ポインタの速度に加えて加速の項目が増えます。
 ポインタの速度は従来から一転して、Windows98SEでテストされた?MouseSensitivityの挙動が適用されています。
 速度のスライダは11段階で、それぞれのMouseSensitivityの値とその際の倍率をまとめたのが下の表です。なお、倍率は実測値から推定したものです。
速度のスライダ位置 遅く  ←  11段階  →  速く
MouseSensitivityの値 1 2 4 6 8 10 12 14 16 18 20
入力値に対する出力値の倍率 0.025 0.05 0.25 0.50 0.75 1.0 1.5 2.0 2.5 3.0 3.5
 加速なしの状態で、各段階の挙動をグラフにしてみました。1が一番遅く、11が一番速い設定です。



 一方、”加速”は従来の”速度”と同じ3つのレジストリ値を使った挙動で、4段階に減らされています。その値を下の表で示します。従来の7段階を一段飛ばしに省略した形になっています。
加速 なし 遅く 速く
MouseSpeed  0  1  2  2
MouseThreshold1  0  7  4  4
MouseThreshold2  0  0 12  6
 MouseSensitivityが10の状態で、各段階の挙動をグラフにしてみました。1が加速なしで4が速くです。



4.WindowsME



 WindowsMEでは、Windows2000と同様の設定項目ですが、スライダは10段階でWindows2000の一番遅いMouseSensitivity=1の設定が省かれています。
 加速は詳細設定で別ウィンドウが出ます。



 各設定でのレジストリの値などもWindows2000と同様です。

 しかし、Windows98SEと同様のMouseSensitivity絡みの不具合が残っており、設定によってはポインタが飛び回る事になります。
 一例として、加速を遅いにして速度を変えたグラフを下に示します。



 このように、WindowsMEでは加速を設定すると、大抵の場合にポインタの誤動作が生じていると思われますが、実際には速めの速度の設定の状態で、かなり速いマウスの操作をしなければ現象が出ないので、特に問題にはならなかったものと思われます。
 しかし、同様の挙動であったWindows98SEでは使われなかったのに、なぜMEでは使われたのか不思議なところです。

4.WindowsXP



 WindowsXPでは、速度はWindows2000と同様ですが、加速の設定が無くなり替わりに”ポインタの精度を高める”という項目が出来ました。

 この”ポインタの精度を高める”のチェックを付けると、小さい入力値(遅い速度)ではより小さい出力値、大きい入力値(速い速度)では大きな出力値になります。速度が一番速い場合のとなります。
 速度を一番速くして”精度”のありなしで比較したのが、下の表です。



 これまでの加速と違い、速度を上げても1ドット単位で操作出来るようになっており、これが”精度を高める”という意味になっています。

 なお、精度のチェックはレジストリのMouseSpeed,MouseThreshold1,2の値に反映しますが、上記のように挙動は従来とは全く異なります。
 MouseSpeedの値は、0が精度なしで1が精度あり、2は無効(1と同じ挙動)となります。
 またMouseThreshold1,2の項目は残っていますが、挙動には全く影響しないようで、従来のソフトとの互換性の為に残されたものと思われます。

<追記>
 加速の挙動については、レジストリのSmoothMouseXCurveとSmoothMouseYCurveを編集する事でカスタマイズできるようです。マウスポインタの加速を調整する方法に詳細に解説されているので参照してみて下さい。

5.まとめ

 以上、今回の調査で、これまで自分が思っていた以上にポインタの挙動が変化している事が判りました。
 来年に予定されているWindowsVistaでは、これがどうなるのでしょうか?

←その36に戻る 最初のページに戻る その38に進む→