在Windows XP上系统锁定/解锁时触发事件

在Windows XP上系统锁定/解锁时触发事件,windows,scripting,time,tracking,python-idle,Windows,Scripting,Time,Tracking,Python Idle,请帮助我找到一种方法来跟踪WinXP机器上的锁定/解锁时间。我试过windows调度器-它只记录登录,不记录锁。还有别的选择吗 在Miranda的源代码中,我看到了通过IdleObject tracker实现的方法,但这种方法太长了。可能是自动IT脚本?时间跟踪程序(免费软件) 如果您有Windows服务,您可以通过OnSessionChange方法获得登录/注销/锁定/解锁事件的通知。在C#中,您可以这样做: protected override void OnSessionChange(S

请帮助我找到一种方法来跟踪WinXP机器上的锁定/解锁时间。我试过windows调度器-它只记录登录,不记录锁。还有别的选择吗


在Miranda的源代码中,我看到了通过IdleObject tracker实现的方法,但这种方法太长了。可能是自动IT脚本?时间跟踪程序(免费软件)

如果您有Windows服务,您可以通过
OnSessionChange
方法获得登录/注销/锁定/解锁事件的通知。在C#中,您可以这样做:

 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;
        }
 }

如果您有Windows服务,您可以通过
OnSessionChange
方法获得登录/注销/锁定/解锁事件的通知。在C#中,您可以这样做:

 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;
        }
 }

我使用WindowsXP内置解决了这个问题,它基本上监视一个Windows事件日志的更改,并允许您根据指定的条件触发内容。由于它是一个日志监视器,通常会在短时间延迟后触发

例如,下面的代码将调用一个BAT文件,其参数取决于登录/注销相关事件(然而,不幸的是,这不仅是实际的用户登录/注销,而且是系统相关事件和计算机锁定事件)


我使用WindowsXP内置解决了这个问题,它基本上监视一个Windows事件日志的更改,并允许您根据指定的条件触发内容。由于它是一个日志监视器,通常会在短时间延迟后触发

例如,下面的代码将调用一个BAT文件,其参数取决于登录/注销相关事件(然而,不幸的是,这不仅是实际的用户登录/注销,而且是系统相关事件和计算机锁定事件)


是否检查CanHandleSessionChange属性是否为True? 这将从设计器视图->属性中进行检查


然后使用OnSessionChange函数检查CanHandleSessionChange属性是否为真? 这将从设计器视图->属性中进行检查


然后使用OnSessionChange功能

谢谢您的提示!我可以在脚本(例如VB)中使用此代码段吗?您需要创建一个Windows服务来获取OnSessionChange挂钩,因此您不能直接从VB脚本中使用此技术。不过,您可以在VB中实现Windows服务。谢谢您的提示!我可以在脚本(例如VB)中使用此代码段吗?您需要创建一个Windows服务来获取OnSessionChange挂钩,因此您不能直接从VB脚本中使用此技术。不过,您可以在VB中实现Windows服务。我在Windows XP计算机上执行了上述命令,但批处理文件的执行/调用仅针对解锁事件,而非锁定事件。我不确定锁定事件的事件id,因为在事件查看器中没有锁定事件的日志条目。任何建议都是最受欢迎的。Vijaysing-事件都在安全日志中,事实证明我指的是登录/注销事件(更正了我上面的帖子)。这些有时会通过锁定/解锁以及实际登录/注销触发。最后,我不再真正使用eventtrigger解决方案,因为我看不到是什么用户触发了事件(人们可以在事件查看器中看到)@Brummo您现在的解决方案是什么?恐怕我再也没有自动解决方案了,因为它对我试图实现的目标不起作用。由于我的需求不是很高,我只是求助于手动检查事件日志。我在Windows XP机器上执行了上述命令,但批处理文件仅针对解锁事件而不是锁定事件执行/调用。我不确定锁定事件的事件id,因为在事件查看器中没有锁定事件的日志条目。任何建议都是最受欢迎的。Vijaysing-事件都在安全日志中,事实证明我指的是登录/注销事件(更正了我上面的帖子)。这些有时会通过锁定/解锁以及实际登录/注销触发。最后,我不再真正使用eventtrigger解决方案,因为我看不到是什么用户触发了事件(人们可以在事件查看器中看到)@Brummo您现在的解决方案是什么?恐怕我再也没有自动解决方案了,因为它对我试图实现的目标不起作用。由于我的需求不是那么大,我只是求助于手动检查事件日志。