ホームページ > バックエンド開発 > C++ > 異なるプラットフォーム間でワークステーションのロック期間をプログラム的に監視するにはどうすればよいですか?

異なるプラットフォーム間でワークステーションのロック期間をプログラム的に監視するにはどうすればよいですか?

DDD
リリース: 2025-01-08 12:27:41
オリジナル
362 人が閲覧しました

How Can I Programmatically Monitor Workstation Lock Duration Across Different Platforms?

イベント処理を使用してワークステーションのロック期間を監視します

ワークステーションのロックアウト期間をプログラム的に決定することは、システム監視およびセキュリティ アプリケーションでは一般的なニーズです。複数のアプローチが存在しますが、この記事ではイベント処理を使用したクロスプラットフォーム ソリューションを検討します。

C# では、SystemEvents.SessionSwitch イベントを使用してマシンのセッション ステータスを監視できます。セッション切り替えの理由が SessionLock または SessionUnlock の場合、対応するイベント ハンドラーは時間を記録し、ロックの期間を決定できます。

<code class="language-csharp">using System;
using Microsoft.Win32;

namespace WorkstationLockMonitor
{
    public class Program
    {
        static DateTime? _lockedTime;

        public static void Main()
        {
            SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
        }

        static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
        {
            if (e.Reason == SessionSwitchReason.SessionLock)
            {
                _lockedTime = DateTime.Now;
            }
            else if (e.Reason == SessionSwitchReason.SessionUnlock)
            {
                if (_lockedTime != null)
                {
                    var duration = DateTime.Now - _lockedTime.Value;
                    Console.WriteLine($"Workstation was locked for {duration.TotalMinutes} minutes");
                }
            }
        }
    }
}</code>
ログイン後にコピー

Python や Java などの他のプログラミング言語でも、セッション変更イベントをサブスクライブするための同様のメカニズムが存在します。たとえば、Python では、win32api モジュールを使用できます:

<code class="language-python">import win32api
from datetime import datetime

_lockedTime = None

def session_switch_callback(hwnd, msg, wParam, lParam):
    global _lockedTime
    if msg == win32api.WM_WTSSESSION_CHANGE:
        if lParam == win32api.WTS_SESSION_LOCK:
            _lockedTime = datetime.now()
        elif lParam == win32api.WTS_SESSION_UNLOCK:
            if _lockedTime is not None:
                duration = datetime.now() - _lockedTime
                print(f"Workstation was locked for {duration.total_seconds()} seconds")

win32api.SetWinEventHook(
    win32api.EVENT_SYSTEM_SESSION_CHANGE,
    win32api.EVENT_SYSTEM_SESSION_CHANGE,
    0,
    session_switch_callback,
    0,
    0,
    win32api.WINEVENT_OUTOFCONTEXT
)</code>
ログイン後にコピー

これらのイベント駆動型メソッドを実装すると、ワークステーションのロックアウト期間をプログラムで追跡でき、セキュリティまたはパフォーマンス分析のためにユーザーのアクティビティ パターンを監視できるようになります。

以上が異なるプラットフォーム間でワークステーションのロック期間をプログラム的に監視するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート