2016-07-08 107 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");