〜 ソフトウェア 〜
セイバーが起動中かを取得 (要USER32.DLL)

API関数のSystemParametersInfoは、デスクトップ項目関連のほか、
ユーザー補助、電力管理等、コントロールパネルで設定できる項目の設定と取得をするものであり、
取得及び設定のできる項目総数が150ほどあるので、このページだけで全てを紹介できません。
今回は「スクーンセイバーの起動状態を取得してみる」と言うことで、
取得に必要なSystemParametersInfoの設定パラメータのみを抜粋すると次のようになります。
uiActionuiParampvParam
SPI_GETSCREENSAVERRUNNING(=0x0072)不使用(=0)受取先変数のポインタ
セイバーが起動してないなら0が、起動してるなら1がpvParamで指定したアドレスの変数に代入されます。

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

savercheck
[パラメータなし]スクリーンセイバーが起動しているかをチェックするだけの為、パラメータは必要ない。

 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
	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 savercheck
	mref stt, 64
	ll_getptr i : ll_ret i.1
	spi 0x0072, 0, i.1 // SPI_GETSCREENSAVERRUNNING
	stt = i
	return
#global

	title "セーバーの起動をチェックします"
	repeat
		wait 10
		savercheck
		if stat : gosub *saveractive
	loop

*saveractive
	// 本来はココへセイバーが起動した際にする処理を書く
	title "セーバーが起動されました"
	return

状態 = savercheck( )
状態スクリーンセイバーが起動していないなら0が、起動しているなら1が返る。
[パラメータなし]スクリーンセイバーが起動しているかをチェックするだけの為、パラメータは必要ない。

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

#module
#defcfunc savercheck local i
	SystemParametersInfo 0x0072, 0, i // SPI_GETSCREENSAVERRUNNING
	return i
#global

	title "セーバーの起動をチェックします"
	repeat
		wait 10
		if savercheck() : gosub *saveractive
	loop

*saveractive
	// 本来はココへセイバーが起動した際にする処理を書く
	title "セーバーが起動されました"
	return