HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0326
YUTAユーザのログイン状態を把握するには?5解決


YUTA

リンク

2007/3/26(Mon) 16:29:50|NO.6568

今、ある一定の時間が経つと、自動的にログオフするプログラムを作成しています。

プログラムは、大まかに書くと

ある一定時間待つ
   ↓
sysexit 1 実行
   ↓
   end

のようなものです。

このプログラムを動かしたままにして、「ユーザ切り替え」を行い、他のユーザのバックグラウンドで動いている状態にし、
そのときにsysexitが実行されると、ログオフされず、その次のendが実行され、プログラムが終了してしまいます。

そこで、プログラムを実行しているユーザのログイン状況を確認して、現在利用中であれば、sysexitを実行し、
ユーザ切り替えしてバックグラウンドで動いている状態であれば、ログインするまで待つように改良しようと思っています。

そこで、お教えいただきたいのですが、プログラムを動かしているユーザのログイン状況を把握するにはどうすればいいのでしょうか?



この記事に返信する


pizza

リンク

2007/3/28(Wed) 19:14:41|NO.6637

sysinfo(1)でログインユーザー名が取得できるので、
プログラム起動時のユーザー名と比較する方法では出来ませんか?



YUTA

リンク

2007/3/29(Thu) 15:25:04|NO.6675

sysinfo(1)でログインユーザー名が取得できても、
そのユーザがバックグラウンド状態なのか、アクティブ(現在操作中)なのかが
わからないとだめなんです。



pizza

リンク

2007/3/29(Thu) 19:39:41|NO.6680

sysinfo(1)ではアクティブなユーザーではなくプログラムを起動した
ユーザー名が取得されるということですね。

Meと2000しかないので確認できませんが
下記キーワードをgoogle等で検索してみてください。


WM_WTSSESSION_CHANGE
WTSRegisterSessionNotification



pizza

リンク

2007/3/30(Fri) 00:31:20|NO.6699

以下のような感じになると思うのですが、
テスト出来る環境が無い為、未確認です。
うまくいかない場合は*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



YUTA

リンク

2007/4/2(Mon) 10:15:17|NO.6824

まだ、実装はしていないのですが、WTSRegisterSessionNotificationを使えばユーザの状態が把握できそうです。
どうも、ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.