〜 インプット 〜
mouseをウィンドウ左上を基点とした座標指定に置換

各種描画命令やオブジェクト配置命令はHSPウィンドウ左上を基点とした座標指定なのに、
HSPウィンドウ内であってもマウス座標を移動させるのは、
クライアント座標ではなくディスプレイ左上を基点としたスクリーン座標となっています。
「HSP内座標だけでイイのに、いちいち絶対座標に変換するのは面倒臭い」という人のために
mouseの座標指定をHSPウィンドウ左上を基点にした座標指定に変更してみましょう。

現在マウスカーソルのある位置ならginfo命令・関数を使うことでスクリーン座標指定ができますが、
今ある位置とは別の座標に移動させる場合は使えませんので、
ここではAPI関数ClientToScreenを使って指定するクライアント座標をスクリーン座標に変換します。
	

mouse X座標, Y座標
X座標HSPウィンドウ左上を基点としたX座標を指定する。
Y座標HSPウィンドウ左上を基点としたY座標を指定する。

 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
31
	ll_libload user, "user32.dll"
	ll_getproc ClientToScreen, "ClientToScreen", user

#module
#undef mouse
#deffunc mouse int, int
	mref x, 0 : mref y, 1
	mref bmscr, 67
	i = x, y
	if i.0 >= 0 & (i.1 >= 0) {
		prm = bmscr.13
		ll_getptr i : ll_ret prm.1
		ll_callfunc prm, 2, ClientToScreen@
	}
	mouse@hsp i.0, i.1
	return
#global

	box = 50, 50, winx - 50, winy - 50
	px = box.0, box.2, box.2, box.0
	py = box.1, box.1, box.3, box.3
	sdim p, 5, 4
	p  = "左上", "右上", "右下", "左下"
	color 200, 200, 100 : boxf
	color , , 200 : boxf box.0, box.1, box.2, box.3
	repeat 4
		mes p.cnt
		mouse px.cnt, py.cnt
		wait 200
	loop
	stop

mouse X座標, Y座標
X座標HSPウィンドウ左上を基点としたX座標を指定する。
Y座標HSPウィンドウ左上を基点としたY座標を指定する。

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

#module
#undef mouse
#deffunc mouse int x, int y, local i
	i = x, y
	if i.0 >= 0 & i.1 >= 0 : ClientToScreen hwnd, i
	mouse@hsp i.0, i.1
	return
#global

	box = 50, 50, ginfo_winx - 50, ginfo_winy - 50
	px = box.0, box.2, box.2, box.0
	py = box.1, box.1, box.3, box.3
	p  = "左上", "右上", "右下", "左下"
	color 200, 200, 100 : boxf
	color , , 200 : boxf box.0, box.1, box.2, box.3
	foreach px
		mes p.cnt
		mouse px.cnt, py.cnt
		wait 200
	loop