〜 システム 〜
壁紙ファイルを取得 (要USER32.DLL)

API関数のSystemParametersInfoは、デスクトップ項目関連のほか、
ユーザー補助、電力管理等、コントロールパネルで設定できる項目の設定と取得をするものであり、
取得及び設定のできる項目総数が150ほどあるので、このページだけで全てを紹介できません。
今回は「現在設定されている壁紙ファイルの取得をしてみる」と言うことで、
壁紙の取得に必要なSystemParametersInfoの設定パラメータのみを抜粋すると次のようになります。
uiActionuiParampvParam
SPI_GETDESKWALLPAPER(=0x0073)ファイルパス格納変数のサイズファイルパス格納変数のポインタ
尚、下記のサンプルでは、ファイルパスを取得した後にHSPウィンドウ内に読み込んでいるわけですが、 当然のことながらHSPに表示できない形式のファイルは読込失敗してしまいます。

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

getwallpaper
[パラメータなし]壁紙ファイルのパスを取得するだけのため、パラメータは必要ない。
尚、命令内部でspi命令を使用しているため、setwallpaper命令より前にspi命令を定義すること。
また、主としたファイルパスはシステム変数refstrに代入される。

 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 getwallpaper val
	mref s, 24
	ll_getptr s : ll_ret p
	spi 0x0073, 512, p, 0 // SPI_GETDESKWALLPAPER
	return
#global

	sdim file, 512
	buffer 2
	getwallpaper file
	picload file
	size = winx, winy
	gsel 0
	title "壁紙画像読込"
	gcopy 2, , , size, size.1
	stop

パス = getwallpaper( )
パス取得した壁紙ファイルパスの受取先を指定する。
[パラメータなし]壁紙ファイルのパスを取得するだけのため、パラメータは必要ない。

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

#module
#defcfunc getwallpaper local s
	sdim s, 512
	SystemParametersInfo 0x0073, 512, s // SPI_GETDESKWALLPAPER
	return s
#global

	buffer 1
	picload getwallpaper()
	size = ginfo_winx, ginfo_winy
	gsel 0
	title "壁紙画像読込"
	gcopy 1, , , size, size.1