2011-08-10 14 views
2

特定のユーザーがコンピュータにログインしている時間を測定したアプリケーションを作成していたとします(実際に作成しているアプリケーションは異なりますが、問題はありません)。システムイベントとスリープからの復帰

ユーザがログインしたとき、ログアウトしたとき、コンピュータを中断したとき(「シャットダウン」メニューで「待機」)、コンピュータがスリープ状態から復帰したときを追跡する必要があります。

一つの例外を除いて、私はそのためSystemEvents(具体的には、PowerModeChangedSessionSwitchイベント)を使用していますし、それは主に動作します:コンピューターが中断されると

PowerModeChangedイベントが正しくモードSuspendを上げています。

PowerModeChangedは、Resumeのモードで発生します。ここまでは順調ですね。

その直後にSessionLockという理由でSessionSwitchイベントが発生します。しかし、私が最終的にレジュメの後にログインすると、SessionUnlockはありません。

この動作は、Windows XP上で起こる、と私は、このロック解除を受信するためにどのような方法がありますXP、Vistaと7

で正しく動作するために、これを必要がありますか?

+0

いいえ、セキュリティで保護されたデスクトップが非アクティブになったことをWindowsで検出する方法は文書化されていません。ポーリングする必要があります。 –

+0

ユーザーがコンピュータにいるかどうかを検出して(マウスを移動してキーを押す)、私は気にしません。現在ログインしているかどうか、コンピュータが中断されておらず、セッションがアクティブであるかどうかはわかりません。 – svick

答えて

3

私のハンドラの1つにキャッチされない例外がありました。どうやら、これは後の出来事が発砲するのを止めました。

+0

私はそれについて考えていましたが、誰かが同じ問題に遭遇する可能性があると思います。 – svick

+0

@ian:svickが正しいです。これは、削除すべきではない便利な質問です。 – SLaks

+0

@SLaks - 問題ありません – iandotkelly

関連する問題