マウス操作



単にマウス操作といっても様々なのですが、今回はマウスの移動速度を変更してみます。
ただマウス座標に何らかの計算をするのではなく、コントロールパネルのマウス設定を直接変更します。
使用するAPIはSystemParametersInfoA関数です。この関数はデスクトップ関係、キーボード関係など、コントロールパネルで設定するようなことが大体出来ます。
この関数の定数の種類は膨大なので、MSDNぐらいしか全てを解説しているサイトは無いでしょう。

以下マウス操作サンプル。

#include "llmod.as"

#const SPI_GETMOUSESPEED 112	;マウスの速度の取得
#const SPI_SETMOUSESPEED 113	;マウスの速度の設定
#const SPI_MOUSEBUTTONSWAP 33	;マウスの右と左のボタンを逆に

#const SPIF_SENDCHANGE 2	;実行中のプログラムに更新メッセージを送る
#const SPIF_UPDATEINIFILE 1	;新しい設定をユーザープロファイルに書き込む

	speed=1	;設定する速度

	getptr pfirstspeed,firstspeed
	prm=SPI_GETMOUSESPEED,0,pfirstspeed,0
	dllproc "SystemParametersInfoA",prm,4,D_USER	;マウス速度の取得

	mes "元の速度 "+firstspeed

	prm=SPI_SETMOUSESPEED,0,speed,SPIF_SENDCHANGE or SPIF_UPDATEINIFILE
	dllproc "SystemParametersInfoA",prm,4,D_USER	;マウス速度の設定

	mes "設定速度 "+speed

	prm=SPI_MOUSEBUTTONSWAP,1,0,SPIF_SENDCHANGE or SPIF_UPDATEINIFILE
	dllproc "SystemParametersInfoA",prm,4,D_USER	;右ボタンと左ボタンの反転

	onexit *quit
	stop

*quit
	prm=SPI_SETMOUSESPEED,0,firstspeed,SPIF_SENDCHANGE or SPIF_UPDATEINIFILE
	dllproc "SystemParametersInfoA",prm,4,D_USER	;元の速度に戻す

	prm=SPI_MOUSEBUTTONSWAP,0,0,SPIF_SENDCHANGE or SPIF_UPDATEINIFILE
	dllproc "SystemParametersInfoA",prm,4,D_USER	;左右の反転を元に戻す

実行すると、マウススピードがかなり遅くなり、且つマウスの右ボタンと左ボタンの役割が反転します。
終了時にはちゃんと元に戻しているので、必ず正常に終了してください。

SystemParametersInfoA…システム全体に関するパラメータの設定
(パラメータの種類を指定する定数,
パラメータ1,
パラメータ2,
プロファイルを書き換えるかどうか)

定数の数は膨大なのでとりあえずここで使用した定数のみ表記しますと、

SPI_GETMOUSESPEED マウススピードの取得
パラメータ1…0
パラメータ2…マウススピードを格納する変数ポインタ

SPI_SETMOUSESPEED マウススピードの設定
パラメータ1…0
パラメータ2…設定するマウススピード

SPI_MOUSEBUTTONSWAP マウスの左右のボタンの役割を入れ替える
パラメータ1…1で反転、0で元に戻す
パラメータ2…0

となります。
第4引数はプロファイルの更新に関するパラメータです。 SPIF_UPDATEINIFILEを指定すると設定ファイルに書き込みます。 SPIF_SENDCHANGEを指定すると現在実行中のプログラムにも更新メッセージを送ります。
これらを指定しない場合は一時的にしか影響しません。今回のようなサンプルではわざわざ更新させる必要はないのですが。

SystemParametersInfo関数はデスクトップ背景やスクリーンセーバーの変更などでも使用できます。
この関数を使うと全体に影響するので、プログラムで勝手に書き換えるのは控えたほうがいいです。


戻る