Maison > développement back-end > C++ > Comment puis-je surveiller par programme la durée de verrouillage du poste de travail sur différentes plates-formes ?

Comment puis-je surveiller par programme la durée de verrouillage du poste de travail sur différentes plates-formes ?

DDD
Libérer: 2025-01-08 12:27:41
original
364 Les gens l'ont consulté

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

Utiliser la gestion des événements pour surveiller la durée de verrouillage du poste de travail

La détermination par programmation de la durée d'un verrouillage d'un poste de travail est un besoin courant dans les applications de surveillance et de sécurité du système. Bien que plusieurs approches existent, cet article explorera une solution multiplateforme utilisant la gestion des événements.

En C#, vous pouvez utiliser l'événement SystemEvents.SessionSwitch pour surveiller l'état de session de la machine. Lorsque la raison d'un changement de session est SessionLock ou SessionUnlock, le gestionnaire d'événements correspondant peut enregistrer l'heure et déterminer la durée du verrouillage.

<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>
Copier après la connexion

Des mécanismes similaires existent pour s'abonner aux événements de changement de session dans d'autres langages de programmation tels que Python ou Java. Par exemple, en Python, vous pouvez utiliser le module 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>
Copier après la connexion

En mettant en œuvre ces méthodes basées sur les événements, vous pouvez suivre par programme la durée d'un verrouillage d'un poste de travail, ce qui vous permet de surveiller les modèles d'activité des utilisateurs à des fins de sécurité ou d'analyse des performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal