〜 インプット 〜
マウスボタンを自動的にクリック1 (要USER32.DLL)

マウスカーソルの位置取得はmousexmousey、マウスカーソルの位置設定はmouse命令で処理できます。
また、クリック判定はstick命令やgetkey命令、onclick命令で取得することが出来ますが、
クリックさせたり、右クリックさせたりすることはできませんので、
当ページでは従来のやり方であるAPI関数内のmouse_event関数を使って行います。
ただ、この関数は少々古く、ウィンドウズ2000頃からはSendInput関数の利用が推奨されていますので、
最近の新しいOSではコチラのやり方を行いましょう。
VOID mouse_event {
DWORDdwFlags,// 動作内容
DWORDdx,// X方向のマウスの絶対座標、または相対移動量
DWORDdy,// Y方向のマウスの絶対座標、または相対移動量
DWORDdwData,// マウスホイールの移動量、またはXボタン状況
ULONG_PTRdwExtraInfo// マウスイベントに関連付けられた追加情報
};
mouse_eventの第1引数に指定する動作内容は以下のコードを組み合わせて使用します。
定数コード動作内容
16進10進
MOUSEEVENTF_MOVE0x00011マウスカーソルの移動
MOUSEEVENTF_LEFTDOWN0x00022マウス左ボタンの押込
MOUSEEVENTF_LEFTUP0x00044マウス左ボタンの解放
MOUSEEVENTF_RIGHTDOWN0x00088マウス右ボタンの押込
MOUSEEVENTF_RIGHTUP0x001016マウス右ボタンの解放
MOUSEEVENTF_MIDDLEDOWN0x002032マウス中央ボタンの押込
MOUSEEVENTF_MIDDLEUP0x004064マウス中央ボタンの解放
MOUSEEVENTF_XDOWN0x0080128マウスXボタンの押込(Windows2000〜)
MOUSEEVENTF_XUP0x0100256マウスXボタンの解放(Windows2000〜)
MOUSEEVENTF_WHEEL0x08002048マウスホイールの回転(Windows2000〜)
MOUSEEVENTF_ABSOLUTE0x800032768正規化された絶対座標(指定しない場合は相対座標)
第2引数、第3引数には第1引数がMOUSEEVENTF_MOVE指定時のマウスカーソル移動時に使用するもので、 移動量はピクセル単位ではなく、コントロールパネルで設定したマウスの速度とアクセラレーションレベルで アクセラレーションレベルが0でない場合の距離は2倍だとか意味のわからないことが書かれています。 また、MOUSEEVENTF_ABSOLUTEを加えた絶対座標で指定する場合もピクセル単位ではありません。 左上(0,0)〜右下(655535,65535)の範囲で正規化された座標となりますので、 解像度が1600×1200の場合、約40で横1ピクセル相当、約55で縦1ピクセル相当となります。 「ヤヤコシイので、移動させる場合は素直にmouse命令を使え」ということですかね? 第4引数には第1引数がMOUSEEVENTF_WHEELMOUSEEVENTF_XDOWNMOUSEEVENTF_XUP使用時に使うもので、 MOUSEEVENTF_WHEELの場合、mousewで取得できるホイールの移動量を指定するのに使用します。 マウス奥の方へ回転させる場合にプラス値であるWHEEL_FORWORD(=0x00000001)、 手前へ回転させる場合にマイナス値であるWHEEL_BACKWORD(=0xFFFFFFFF)を指定することで、 1回分のホイール回転量であるWHEEL_DELTA(=0x00000078)単位の値が渡されます。 MOUSEEVENTF_XDOWNMOUSEEVENTF_XUPの場合はXボタンを押したり離したりする時に使うもので、 押したり離したりするXボタン「XBUTTON1(=0x0001)」か「XBUTTON2(=0x0002)」を指定します。 尚、Xボタンとは左右のマウスボタンの更に横側や手前側に付いてたりする4つ目以上のボタンのこと。 自分は標準的な3ボタンマウスしか所持していないので検証していません。 第5引数に設定する32ビットのマウスイベント追加情報値の受け取りは別のAPI関数を使用します。 通常使用するには0を指定しておいて問題ありませんのでココでは紹介しません。

click ボタン, フラグ
ボタン操作対象ボタン(0:左, 1:右, 2:中央)を指定する。
フラグボタン押込(=0)か、解放(=1)かを指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
	ll_libload user, "user32.dll"
	ll_getproc mouse_event, "mouse_event", user

#module
#deffunc click int, int
	mref no, 0 : mref upflg, 1
	prm = 2 << (no >= 1 + (no >= 2) * 2) * (upflg ! 0 + 1), 0, 0, 0, 0
	ll_callfunc prm, 5, mouse_event@
	return
#global

	pos 10, 10 : button "終了", *exit
	wait 100
	// ボタン上へ移動
	ginfo 0 : mp = prmx, prmy
	ginfo 3
	x = mp.0, prmx - winx + 20
	y = mp.1, prmy - winy + 20
	repeat 20, 1
		wait 10
		mouse x - (x.0 - x.1 * cnt / 20), y - (y.0 - y.1 * cnt / 20)
	loop
	// ボタン押下
	wait 50
	click 0
	wait 50
	click 0, 1
	stop

*exit

click ボタン, フラグ
ボタン操作対象ボタン(0:左, 1:右, 2:中央)を指定する。
フラグボタン押込(=0)か、解放(=1)かを指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#uselib "user32.dll"
#func  global mouse_event "mouse_event" int, int, int, int, int

#module
#deffunc click int no, int upflg
	mouse_event (2 << limit(no, 0, 2) * 2) * ((upflg ! 0) + 1)
	return
#global

	pos 10, 10 : button gosub "終了", *exit
	wait 100
	// ボタン上へ移動
	x = ginfo_mx, ginfo_wx2 - ginfo_winx + 20
	y = ginfo_my, ginfo_wy2 - ginfo_winy + 20
	repeat 20, 1
		wait 10
		mouse x - (x.0 - x.1) * cnt / 20, y - (y.0 - y.1) * cnt / 20
	loop
	// ボタン押下
	wait 50
	click 0
	wait 50
	click 0, 1
	stop

*exit
	end