〜 システム 〜
有効なスクリーンサイズを取得 (要USER32.DLL)

HSPはディスプレイサイズを取得する命令がありますが、ウィンドウを最大化したときのサイズ、
つまり、タスクバー、その他アプリケーションバーを除いたワークエリアサイズを取得できませんが、
API関数のSystemParametersInfoを利用すれば取得できますので、今回はコレを使って取得してみます。
SystemParametersInfoでは、取得及び設定のできる項目総数が150ほどあり、
当ページで全てを紹介出来ませんので、今回のTipsに必要な項目だけ抜粋すると次のようになります。
uiActionuiParampvParam
SPI_GETWORKAREA(=0x0030)不使用(=0)RECT構造体のポインタ
RECT構造体は左端・上端・右端・下端座標を合わせて矩形を表現するためのもので、 コレを元に要素0を左、1を上として左上の座標を、2を右、3を下として右下の座標を取得してください。 逆に「スクリーンサイズを設定する」には、コチラの紹介Tipsを参照してください。

spi アクション, 送信値, 一時変数, 更新
アクション実施するシステム情報の取得・設定内容を指定する。
送信値数値パラメータを指定する。
一時変数一時的に使用する変数のポインタを指定する。
更新設定時にユーザープロファイルの更新、ウィンドウへの通知を実施するか否かを指定する。

getworkarea 格納配列
格納配列現在のワークエリア4隅のポジション(0:左 1:上 2:右 3:下)を格納する数値型配列変数を指定する
尚、命令内部でspi命令を使用しているため、getworkarea命令より前にspi命令を定義すること。

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

#module
#deffunc spi int, int, int, int
	mref uiaction, 0 : mref uiparam, 1 : mref pvparam, 2 : mref fwinini, 3
	prm = uiaction, uiparam, pvparam, fwinini
	ll_callfunc prm, 4, SystemParametersInfo@
	return

#deffunc getworkarea val
	mref ary, 48
	ll_getptr ary : ll_ret p
	spi 0x0030, 0, p, 0 // SPI_GETDESKWALLPAPER
	return
#global

	dim area, 4
	bgscr 2, dispx, dispy, , 0, 0
	gsel 2, 2
	getworkarea area
	color 250, 200, 200 : boxf area, area.1, area.2, area.3 : color
	pos 50, 30 : mes "ワークエリアは(" + area + ", " + area.1 + ")から(" + area.2 + ", " + area.3 + ")。"
	pos 50, 60 : mes "つまり、赤色で塗りつぶされた矩形となります。"
	pos 50, 90 : mes "終了するには[ALT + F4]を押してください。"
	stop

getworkarea 格納配列
格納配列現在のワークエリア4隅のポジション(0:左 1:上 2:右 3:下)を格納する数値型配列変数を指定する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#uselib  "user32.dll"
#func  global SystemParametersInfo "SystemParametersInfoA" int, int, var, int

#module
#deffunc getworkarea array ary
	SystemParametersInfo 0x0030, 0, ary // SPI_GETWORKAREA
	return
#global

	dim area, 4
	bgscr 0, ginfo_dispx, ginfo_dispy, , 0, 0
	gsel 0, 2
	getworkarea area
	color 250, 200, 200 : boxf area, area.1, area.2, area.3 : color
	pos 50, 30 : mes "ワークエリアは(" + area + ", " + area.1 + ")から(" + area.2 + ", " + area.3 + ")。"
	pos 50, 60 : mes "つまり、赤色で塗りつぶされた矩形となります。"
	pos 50, 90 : mes "終了するには[ALT + F4]を押してください。"