chaoticyeshua Posted November 21, 2017 Share Posted November 21, 2017 Hi everyone. I work for a university, and as a part of our IT security policies we must have a solution to log off idle users after a certain period of time. I've used a script to monitor idle time and log off idle users for several years without any issues, until we imaged our labs with Windows 10 (1703). Now, when issuing the shutdown command to log off, it gets stuck logging off if the user has open and unsaved documents, requesting to save them before logging off, even if utilizing the force and force if hung options. Back in Windows 7, just utilizing Shutdown(16) was adequate, but I've also tried Shutdown(20) with the same results. Other than killing open processes before calling shutdown, does anyone have any ideas that may help? What's weird is I can run the same script with open/unsaved documents on my computer and it logs me off without any issues, so I'm not entirely sure what's triggering the problem on our lab computers. expandcollapse popup#include <Misc.au3> AutoItSetOption("TrayIconHide", 1) ;Check if the script is already running If Not _Singleton(@ScriptName, 1) Then Exit While 1 $iIdleTime = _Timer_GetIdleTime() ;Time is in ms, so 1000 is 1 second If $iIdleTime >= 900000 Then ;Log off $sIdleCheck = MsgBox(48, "Idle Session", "University IT security policies dictate that any publicly available computer must log off idle users after a certain period of time." & @CRLF & @CRLF & "The computer has been idle for 10 minutes. If you are still at the computer, please press OK to reset the timer. Otherwise, you will be logged off in 90 seconds.", 90) If $sIdleCheck <> 1 Then Shutdown(16) EndIf EndIf ;Only check idle time every 5 seconds to prevent excessive CPU/memory usage Sleep(5000) WEnd ; #FUNCTION#;=============================================================================== ; ; Name...........: _Timer_GetIdleTime() ; Description ...: Returns the number of ticks since last user activity (i.e. KYBD/Mouse) ; Syntax.........: _Timer_GetIdleTime() ; Parameters ....: None ; Return values .: Success - integer ticks since last (approx. milliseconds) since last activity ; Failure - Sets @extended = 1 if rollover occurs (see remarks) ; Author ........: PsaltyDS at http://www.autoitscript.com/forum ; Modified.......: v1.0.0 -- 03/20/2008 First version ; v1.0.1 -- 06/11/2008 Fixed bug when idle time = 0ms ; Remarks .......: The current ticks since last system restart will roll over to 0 every 50 days or so, ; which makes it possible for last user activity to be before the rollover, but run time ; of this function to be after the rollover. If this happens, @extended = 1 and the ; returned value is ticks since rollover occured. ; Related .......: _CheckIdle() ; Link ..........; ; Example .......; Yes ; ;;========================================================================================== Func _Timer_GetIdleTime() ; Get ticks at last activity Local $tStruct = DllStructCreate("uint;dword"); DllStructSetData($tStruct, 1, DllStructGetSize($tStruct)); DllCall("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr($tStruct)) ; Get current ticks since last restart Local $avTicks = DllCall("Kernel32.dll", "int", "GetTickCount") ; Return time since last activity, in ticks (approx milliseconds) Local $iDiff = $avTicks[0] - DllStructGetData($tStruct, 2) If $iDiff >= 0 Then ; Normal return Return $iDiff Else ; Rollover of ticks counter has occured Return SetError(0, 1, $avTicks[0]) EndIf EndFunc ;==>_Timer_GetIdleTime Link to comment Share on other sites More sharing options...
Au3Builder Posted November 21, 2017 Share Posted November 21, 2017 (edited) Have you tried the following combination? Shutdown(BitOR(0,4)) You can also close all windows or kill all processes right before logging off. Edited November 21, 2017 by Au3Builder Link to comment Share on other sites More sharing options...
chaoticyeshua Posted November 21, 2017 Author Share Posted November 21, 2017 (edited) Actually, it looks like Windows Defender SmartScreen started blocking the compiled script on some of the computers. I'm looking into a way to add it as an exception. Thanks for the suggestion! Edited November 21, 2017 by chaoticyeshua Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now