2016-07-08 106 views
2

我开发一个应用程序在后台运行,用于捕获用户的活动他们的系统上,如注销/关机/待机/切换用户注销用户/继续任意键/系统按锁等如何在用户的会话锁定

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

我曾尝试下面的代码。当用户登录,但用户已锁定他们的系统后,不工作的ExitWindowsEx()功能工作正常。

使用的代码

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

任何一个可以帮助我如何注销用户时,他/她在锁定状态。

+0

不能在此可以在组策略或AD帐户设置做了什么?可能不需要 – MickyD

+0

有关使用该http://www.windows-commandline.com/windows-logoff-command-line/ – 2016-07-08 05:43:54

+0

尝试'的Process.Start(“关机”如何编程东西(假设这是一个域),“/R/T 0 “);'和'的Process.Start(” 关断”, “-L /吨0”);'但在锁定状态下不工作。 –

回答

0

最后得到的替代问题,

代码

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

上面的代码将调度系统重启(15分钟)在系统锁定时,如果用户解锁系统之前15分钟代码将取消该时间表,否则这将在15分钟后重启系统。

重新启动调度代码

Process.Start("shutdown", "/r /f /t 900"); 

取消重启

Process.Start("shutdown", "-a");