以下のような感じになると思うのですが、
テスト出来る環境が無い為、未確認です。
うまくいかない場合は*lb_SessionChange内で
他の定数を試してみてください。
#uselib "wtsapi32.dll"
#func WTSRegisterSessionNotification "WTSRegisterSessionNotification" int, int
#func WTSUnRegisterSessionNotification "WTSUnRegisterSessionNotification" int
#define WM_WTSSESSION_CHANGE 0x02B1
#define NOTIFY_FOR_THIS_SESSION 0
#define NOTIFY_FOR_ALL_SESSIONS 1
// WM_WTSSESSION_CHANGEのwParamに使われる定数
#define WTS_CONSOLE_CONNECT 1
#define WTS_CONSOLE_DISCONNECT 2
#define WTS_REMOTE_CONNECT 3
#define WTS_REMOTE_DISCONNECT 4
#define WTS_SESSION_LOGON 5
#define WTS_SESSION_LOGOFF 6
#define WTS_SESSION_LOCK 7
#define WTS_SESSION_UNLOCK 8
#define WTS_SESSION_REMOTE_CONTROL 9
// ユーザー切り替え時にメッセージを受け取るようにする
WTSRegisterSessionNotification hwnd, NOTIFY_FOR_THIS_SESSION
if stat == 0 : dialog "error" : end
oncmd gosub *lb_OnSessionChange, WM_WTSSESSION_CHANGE
onexit *lb_exit
bUserActive = 1
ua = bUserActive
title "active"
*main
wait 20
if ua != bUserActive {
if bUserActive {
title "active"
} else {
title "background"
}
ua = bUserActive
}
goto *main
*lb_OnSessionChange
// wParamにセッションの状態が入っている
switch wParam
case WTS_SESSION_LOCK
bUserActive = 0
swbreak
case WTS_SESSION_UNLOCK
bUserActive = 1
swbreak
default
swbreak
swend
return
*lb_exit
// 登録解除
WTSUnRegisterSessionNotification hwnd
end