マウス設定なら SystemParametersInfo
PC を再起動するとマウスの設定がデフォルトに戻されてしまうので、レジストリの項目 HKEY_CURRENT_USER\Control Panel\Mouse
へのアクセス拒否を実施してから長らく経つ。この設定には何の不便さもないが、Windows API でマウスの設定を変える方法がわかったので、その方法を試してみることにした。
スタートアッププログラムとして、以下の C ソースコードより生成されたアプリケーションを実行する。
#include <windows.h> int WINAPI WinMain(HINSTANCE hi, HINSTANCE hp, LPSTR cl, int cs) { SystemParametersInfo(SPI_SETDOUBLECLICKTIME, 200, NULL, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE); return 0; }
レジストリの項目 HKEY_CURRENT_USER\Control Panel\Mouse
を編集しても、すぐさま反映されるわけではない。そのため、レジストリ系の API ではなく、SystemParametersInfo という専用の API を使う。上記コードでは、ダブルクリック速度を 200 に設定している。第四引数が重要である。SPIF_UPDATEINIFILE
は、レジストリに値を書き込むという意味がある。そして、SPIF_SENDCHANGE
には、システムに設定変更を通知するという意味がある。これがあるからこそ、設定値の即時反映が行われる。
あとがき
そういえば、Acer V5 171 のタッチパッドだが、キーボードの Fn + F7 を実行すると、一時的に無効にすることができるが、無効にしたまま PC を再起動すると、無効になりつづけている。マウスカーソルも表示されなくなるので、もし、仮に、Fn + F7 を知らなければ、故障と思うのも無理はない。無自覚に Fn + F7 を押してしまい、再起動してもタッチパッドが反応しないという、そんな事態に。
ちなみに、WSH で同じことをやろうとすると、以下のようなコードになるが、マウスのプロパティ画面を開いて閉じるという、エレガントでない処理が必須になる。
var sh = WScript.CreateObject("WScript.Shell"); sh.RegWrite("HKCU\\Control Panel\\Mouse\\DoubleClickSpeed", "200", "REG_SZ"); sh.exec("rundll32.exe shell32.dll,Control_RunDLL main.cpl").Terminate();