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>
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>
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!