imppi Posted January 25, 2010 Share Posted January 25, 2010 (edited) Hi, any tips on howto note if user locks her computer? And is it possible run scripts after user has locked it? Edit: in otherwords how to run a script when user locks the computer? thanks in adwance. Edited January 25, 2010 by imppi Link to comment Share on other sites More sharing options...
Juvigy Posted January 25, 2010 Share Posted January 25, 2010 I have several scripts that run on my pc while it is locked. I start them via the windows task scheduler. Link to comment Share on other sites More sharing options...
imppi Posted January 25, 2010 Author Share Posted January 25, 2010 (edited) Hmm. is there a possibility to run a script at the moment the computer gets locked? or did you mean to run things when computer has been idle for some time? i'd like to get one programs state to change when the comp gets locked and to get it changed again when user unlocks the computer. i'd probably need to give the program gui commands with mouse, or mm. is that even possible after computer gets locked? Edited January 25, 2010 by imppi Link to comment Share on other sites More sharing options...
Xenobiologist Posted January 25, 2010 Share Posted January 25, 2010 expandcollapse popupGlobal Const $DESKTOP_ENUMERATE = 0x40 Global Const $SPI_GETSCREENSAVERRUNNING = 114 Global Const $DESKTOP_SWITCHDESKTOP = 0x100 HotKeySet("{ESC}", "_Terminate") AdlibRegister("IsDeskTopLocked", 500) While 1 Sleep(10) WEnd Func IsDeskTopLocked() Local $p_lngHwnd, $p_lngRtn, $p_lngErr, $p_lngScreenSaver, $p_blnIsScreenSaver ;~ ' ------------------------------------------ ;~ ' First check for screen saver one of 2 ways, ;~ ' based of OS ;~ ' ------------------------------------------ If @OSTYPE = "WIN32_WINDOWS" Then ;~ ' --------------------------------------- ;~ ' Pre W2K -- Note, will only be TRUE if ;~ ' the "Password Protected" box is ;~ ' checked. ;~ ' --------------------------------------- $p_lngHwnd = DllCall("user32.dll", "int", "OpenDesktopA", "str", "screen-saver", "int", 0, "int", False, "int", $DESKTOP_ENUMERATE) If $p_lngHwnd[0] <> 0 Then $p_blnIsScreenSaver = True Else $p_blnIsScreenSaver = False EndIf Else ;~ ' --------------------------------------- ;~ ' W2K+ -- Will determine if screen saver ;~ ' is running whether or not the ;~ ' "Password Protected" box is checked ;~ ' --------------------------------------- $p_lngRtn = DllCall("user32.dll", "int", "SystemParametersInfoA", "int", $SPI_GETSCREENSAVERRUNNING, "int", 0, "int", $p_lngScreenSaver, "int", 0) If $p_lngRtn[0] = 0 Then ConsoleWrite("+>Error detecting screen saver" & @LF) Else $p_blnIsScreenSaver = $p_lngScreenSaver EndIf EndIf ;~ ' ------------------------------------------ ;~ ' If screen saver is *not* running, then ;~ ' check for locked workstation ;~ ' ------------------------------------------ If $p_blnIsScreenSaver Then If @OSTYPE = "WIN32_WINDOWS" Then ConsoleWrite("Screen saver is running..., Handle #" & $p_lngHwnd[0] & @LF) $p_lngHwnd = DllCall("user32.dll", "int", "CloseDesktop", "int", $p_lngHwnd[0]) Else ConsoleWrite("Screen saver is running on W2K+" & @LF) EndIf Else $p_lngHwnd = DllCall("user32.dll", "int", "OpenDesktopA", "str", "Default", "int", 0, "int", False, "int", $DESKTOP_SWITCHDESKTOP) If $p_lngHwnd[0] = 0 Then ConsoleWrite("Error with OpenDesktop" & @LF) Else $p_lngRtn = DllCall("user32.dll", "int", "SwitchDesktop", "int", $p_lngHwnd[0]) $p_lngErr = _GetLastErrorMessage() If $p_lngRtn[0] = 0 Then If $p_lngErr = 0 Then ConsoleWrite("! Desktop is locked" & @LF) Else ConsoleWrite("Error with SwitchDesktop" & @LF) EndIf Else ConsoleWrite("Not locked!" & @LF) EndIf $p_lngHwnd = DllCall("user32.dll", "int", "CloseDesktop", "int", $p_lngHwnd[0]) EndIf EndIf EndFunc ;==>IsDeskTopLocked Func _Terminate() Exit EndFunc ;==>_Terminate ;=============================================== ; _GetLastErrorMessage($DisplayMsgBox="") ; Format the last windows error as a string and return it ; if $DisplayMsgBox <> "" Then it will display a message box w/ the error ; Return Window's error as a string ;=============================================== Func _GetLastErrorMessage($DisplayMsgBox = "") Local $ret, $s Local $p = DllStructCreate("char[4096]") Local Const $FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000 If @error Then Return "" $ret = DllCall("Kernel32.dll", "int", "GetLastError") $ret = DllCall("kernel32.dll", "int", "FormatMessage", _ "int", $FORMAT_MESSAGE_FROM_SYSTEM, _ "ptr", 0, _ "int", $ret[0], _ "int", 0, _ "ptr", DllStructGetPtr($p), _ "int", 4096, _ "ptr", 0) $s = DllStructGetData($p, 1) If $DisplayMsgBox <> "" Then MsgBox(0, "_GetLastErrorMessage", $DisplayMsgBox & @CRLF & $s) Return $s EndFunc ;==>_GetLastErrorMessage or While 1 Sleep(1000) If _isWorksatationLocked() Then ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & " - " & "workstation locked" & @CRLF) WEnd Func _isWorksatationLocked() If StringInStr(WinGetText(""), "Program Manager") <> 0 And WinGetTitle("") = "" Then Return 1 Return 0 EndFunc ;==>_isWorksatationLocked Mega Scripts & functions Organize Includes Let Scite organize the include files Yahtzee The game "Yahtzee" (Kniffel, DiceLion) LoginWrapper Secure scripts by adding a query (authentication) _RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...) Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc. MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times Link to comment Share on other sites More sharing options...
Spart Posted January 26, 2010 Share Posted January 26, 2010 So I was wondering, can you run an interactive script when the screen is locked? I know that I can run a script that doesn't interact, but I also know that the screen elements are still there, so I would like to script window interaction WHILE the computer is locked if possible. Thanks in advance! S. 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