2010-09-28 29 views
1

Aidez-moi à trouver un moyen de suivre le temps de verrouillage/déverrouillage sur ma machine WinXP. J'ai essayé le planificateur de fenêtres - il enregistre seulement les logins, pas les verrous. Des alternatives?Déclencher un événement lorsque le système se verrouille/se déverrouille sous Windows XP

Dans le code source de Miranda, j'ai vu l'implémentation via le suivi IdleObject, mais cette méthode est trop longue. Peut-être un script AutoIt? Programme de suivi du temps (logiciel gratuit)?

Répondre

1

Si vous avez un service Windows, vous pouvez recevoir une notification des événements de connexion/déconnexion/verrouillage/déverrouillage via la méthode OnSessionChange. En C# vous faire:

protected override void OnSessionChange(SessionChangeDescription changeDescription) 
{ 
     switch (changeDescription.Reason) 
     { 
      case SessionChangeReason.SessionLogon: 
       //Logon 
       break; 
      case SessionChangeReason.SessionLogoff: 
       //Logoff 
       break; 
      case SessionChangeReason.RemoteConnect: 
       //Remote Connect 
       break; 
      case SessionChangeReason.RemoteDisconnect: 
       //Remote Disconnect 
       break; 
      case SessionChangeReason.SessionLock: 
       //lock 
       break; 
      case SessionChangeReason.SessionUnlock: 
       //Unlock 
       break; 
      default: 
       break; 
     } 
} 
+0

Merci pour l'astuce! Puis-je utiliser cet extrait à partir d'un script, par ex. VB? – Croot

+0

Eh bien, vous devez créer un service Windows pour obtenir le hook OnSessionChange, donc vous ne pouvez pas utiliser cette technique à partir d'un script VB directement. Vous pouvez cependant implémenter un service Windows dans VB. – TheCodeKing

0

Je l'ai résolu en utilisant Windows XP intégré dans eventtriggers.exe, qui surveille essentiellement l'un des journaux d'événements Windows pour les modifications et vous permettent de déclencher des choses en fonction de critères que vous spécifiez. Comme il s'agit d'un moniteur de journal, il se déclenche généralement après un court délai

Par exemple, le code suivant qui appellera un fichier BAT avec un paramètre dépendant des événements liés à la connexion/déconnexion (cependant, ce n'est malheureusement pas seulement réel utilisateur/déconnexions mais aussi liées au système

événements et événements de verrouillage de l'ordinateur)
eventtriggers.exe /create /tr "logout_occured" /l SECURITY /eid 538 /tk "cmd /c c:\lockhandler.bat LOGOUT_OCCURED" 
eventtriggers.exe /create /tr "login_occured" /l SECURITY /eid 528 /tk "cmd /c c:\lockhandler.bat LOGIN_OCCURED" 
+0

J'ai exécuté les commandes ci-dessus sur la machine Windows XP mais le fichier de commandes est exécuté/appelé uniquement pour l'événement de déverrouillage et non pour l'événement de verrouillage. Je ne suis pas sûr de l'ID d'événement pour l'événement de verrouillage car il n'y a aucune entrée de journal dans l'observateur d'événements pour l'événement de verrouillage. Toute suggestion est la bienvenue. –

+0

Vijaysing - Les événements sont dans le journal de sécurité et il se trouve que je voulais dire les événements de connexion/déconnexion (corrigé mon message ci-dessus). Ceux-ci sont parfois déclenchés par le verrouillage/déverrouillage ainsi que la connexion/déconnexion réelle. En fin de compte, je n'utilise plus vraiment la solution eventtrigger, car je ne peux pas voir quel utilisateur a déclenché l'événement (quelque chose que l'on peut voir dans l'afficheur d'événements) – Brummo

+0

@Brummo Quelle est votre solution maintenant? – Richie

0

ne pas vérifier que la propriété CanHandleSessionChange est vrai ou non? Cela sera vérifié du point de vue de concepteur -> Propriété

Ensuite, utilisez la fonction OnSessionChange