C# 如何在用户';s会话已锁定

C# 如何在用户';s会话已锁定,c#,logoff,C#,Logoff,我正在开发一个在后台运行的应用程序,用于捕获用户在其系统上的活动,如注销/关机/空闲/切换用户/继续按任何键/系统锁等 它工作正常,我能够跟踪所有活动,现在我需要在系统锁定15分钟后自动注销用户 我已经尝试了下面的代码。ExitWindowsEx()功能在用户登录时正常工作,但在用户锁定系统后不工作 旧代码 有人能帮我在用户处于锁定状态时如何注销他/她吗。终于找到了解决问题的方法 代码 上述代码将在系统锁定时安排系统重新启动(15分钟),如果用户在15分钟前解锁系统,则代码将取消该计划,否则将在

我正在开发一个在后台运行的应用程序,用于捕获用户在其系统上的活动,如注销/关机/空闲/切换用户/继续按任何键/系统锁等

它工作正常,我能够跟踪所有活动,现在我需要在系统锁定15分钟后自动注销用户

我已经尝试了下面的代码。
ExitWindowsEx()
功能在用户登录时正常工作,但在用户锁定系统后不工作

旧代码
有人能帮我在用户处于锁定状态时如何注销他/她吗。

终于找到了解决问题的方法

代码 上述代码将在系统锁定时安排系统重新启动(15分钟),如果用户在15分钟前解锁系统,则代码将取消该计划,否则将在15分钟后重新启动系统

重新启动计划程序代码 取消重新启动
这不能在组策略或AD帐户设置中完成吗?可能不需要编写任何程序(假设这是一个域),使用这个经过尝试的
进程如何和<代码>过程启动(“关闭”,“L/t 0”)但不能在锁定状态下工作。是的,我们可以通过组策略执行,但需要从应用程序端执行。
[DllImport("user32")]
public static extern bool ExitWindowsEx(uint uFlags, uint dwReason);

private SessionSwitchEventHandler sseh;

void SysEventsCheck(object sender, SessionSwitchEventArgs e)
{
    switch (e.Reason)
    {
        case SessionSwitchReason.SessionLock:
           if(condition)
           {
               ExitWindowsEx(0, 0);
           }
           break;
    }    
}
public static bool _IsLocked;
private SessionSwitchEventHandler sseh;

void SysEventsCheck(object sender, SessionSwitchEventArgs e)
{
    switch (e.Reason)
    {
        case SessionSwitchReason.SessionLock:
            if (!_IsLocked)
            {
                Process.Start("shutdown", "/r /f /t 900");
            }
            _IsLocked = true;
            break;
        case SessionSwitchReason.SessionUnlock:
            if (_IsLocked)
            {
                Process.Start("shutdown", "-a");
            }
            _IsLocked = false;
            break;
    }
}
Process.Start("shutdown", "/r /f /t 900");
Process.Start("shutdown", "-a");