UWSCでモニター情報(デスクトップサイズ・作業サイズ)を取得する

stuncloudさんが、「あ、でもこれマルチモニタだとどうなるん…?」とか書いてたので、ちゃちゃっと。
掲示板から小ネタ | たっぷす庵


SystemParametersInfoのSPI_GETWORKAREAは、プライマリモニターの情報しか返しません。
他の情報が知りたい場合は、GetMonitorInfoを使うのですが、モニターハンドルが必要なので、手数が増える。

DEF_DLL MonitorFromPoint(long,long,DWORD): DWORD: user32
DEF_DLL GetMonitorInfoW(DWORD,var long[]): BOOL: user32

DIM i, x, y, inf[9]
inf[0] = 40
FOR i = 0 TO MONITOR() - 1
	x = MONITOR(i, MON_X)
	y = MONITOR(i, MON_Y)
	IFB GetMonitorInfoW(MonitorFromPoint(x, y, 0), inf) THEN	// 0:MONITOR_DEFAULTTONULL
		PRINT "(" + inf[1] + "," + inf[2] + ")-(" + inf[3] + "," + inf[4] + ") (" + inf[5] + "," + inf[6] + ")-(" + inf[7] + "," + inf[8] + ") " + inf[9]
	ENDIF
NEXT

PRINTするのは、「デスクトップ領域 作業領域 プライマリーモニタフラグ」となっています。
Win8では未確認。