FifthLobe Posted March 16, 2006 Posted March 16, 2006 (edited) This uses windows' built-in transparency to transition your screen to black.A giant window is used because I know no other way of doing fullscreen.It'll fade slowly if your video card has to deal with a huge wallpaper or if your video card is weak in general.The exe is meant to be named AutoFade.exe, which is necessary for the purpose of the KillClones() function.Enjoyexpandcollapse popup; ---------------------------------------------------------------------------- ; ; AutoIt Version: 3.1.0 ; Author: Fifthlobe <fifthlobeATspambobDOTnet> ; ; Script Function: ; 'Locks' your computer so that a lay person cannot take over your session. ; It is still possible to logout or shutdown if necessary. ; -------------------------------------------------------------------------- ; Default password is: password ; ; Hotkeys: ; Ctrl+Shift+~ ...... Lock/unlock ; Ctrl+Shift+P ...... Toggle preferences window ; ; ---------------------------------------------------------------------------- ; Script Start ;options Opt("RunErrorsFatal", 0); don't close on @error. Opt("TrayIconHide", 1); hide system tray icon. ;includes #include <guiconstants.au3> #include <date.au3> ;hotkeys ;~ HotKeySet('{ESC}', 'Quit') HotKeySet('^~', 'FadeIn') HotKeySet('^P', 'Preferences') ;some declarations Global $fade = 'in'; tells whether the program should fade into the screen or out, used in Fade() Global $running = False; set to True when program is running to prevent interruption, used in Fade() Global $locked = False; triggers whether to 'lock' the computer (kill task manager, etc) Global $tries = 0; counts the number of attempts to enter correct password (when unlocking) Global $lockdown = 0; stores the time to reactivate password dialog when too many attempts are made, equals 0 when not needed) Global $pword = 'password'; default password before it's set by the user Global $maxtries = 3; default maximum # of tries before 'lockdown' Global $lockdelay = 5; default # of seconds a 'lockdown' is instigated Global $autopower = 1; default to automatically power down the monitor (=1 when enabled) ;gui setup $gui = GUICreate('Fullscreen', @DesktopWidth*1.2, @DesktopHeight*1.2, -1, -1, -1, $WS_EX_TOOLWINDOW+$WS_EX_TOPMOST); main fullscreen GUI GUISetState(@SW_HIDE, $gui) ; $dialog = GUICreate('Password', 250, 20, 200, 120, $WS_CHILD, -1, $gui); password dialog $passbox = GUICtrlCreateInput('', 0, 0, 200, 20, $ES_PASSWORD) $passbtn = GUICtrlCreateButton('Unlock', 200, 0, 50, 20, $BS_CENTER+$BS_VCENTER) GUISetState(@SW_HIDE, $dialog) ; $prefs = GUICreate('Preferences', 260, 200, -1, -1, $WS_EX_TOPMOST); preferences window GUICtrlCreateLabel('Password: ', 5, 12, 50, 20, $SS_RIGHT) $prefs_nowpass = GUICtrlCreateInput('', 60, 10, 180, 20, $ES_PASSWORD); ask for current password, used to prevent unauthorized changes in preferences GUICtrlCreateLabel('New: ', 5, 37, 50, 20, $SS_RIGHT) $prefs_pword = GUICtrlCreateInput('', 60, 35, 180, 20, $ES_PASSWORD) GUICtrlCreateLabel('Verify:', 5, 62, 50, 20, $SS_RIGHT) $prefs_pword_verify = GUICtrlCreateInput('', 60, 60, 180, 20, $ES_PASSWORD) $prefs_maxtries = GUICtrlCreateInput($maxtries, 60, 85, 25, 20) $prefs_lockdelay = GUICtrlCreateInput($lockdelay, 200, 85, 25, 20) $prefs_autopower = GUICtrlCreateCheckbox('Auto power down monitor', 60, 110) GUICtrlSetState($prefs_autopower, $GUI_CHECKED) $resetprefs = GUICtrlCreateButton(' Reset ', 5, 145) $cancelprefs = GUICtrlCreateButton(' Cancel ', 55, 145) $quitbtn = GUICtrlCreateButton(' Quit ', 110, 145) $saveprefs = GUICtrlCreateButton(' Save ', 205, 145) GUISetState(@SW_HIDE, $prefs) ;main loop While 1 ;~ Sleep(100) If $fade = 'out' And $running = False And $locked = True Then WinKill('Windows'); kill Windows Task Manager and the like EndIf KillClones(); Kill duplicate processes $guimsg = GUIGetMsg(1) If $guimsg[0] <> 0 Then $guiwinhandle = $guimsg[1] $guictrlhandle = $guimsg[2] $guimsg = $guimsg[0] Select Case $guimsg = $passbtn $pbox = GUICtrlRead($passbox); temporarily stores value entered into $passbox GUICtrlSetData($passbox, '') If $pbox = $pword Then $tries = 0 GUISetState(@SW_HIDE, $dialog) FadeOut(); fade out on correct pass ElseIf $pbox <> '' Then $tries += 1 Sleep(200) GUISetBkColor(0xFF0000, $gui) Sleep(300) GUISetBkColor(0x000000, $gui) If $tries >= $maxtries Then GUISetState(@SW_DISABLE, $dialog) GUICtrlSetState($passbox, $GUI_DISABLE) GUICtrlSetState($passbtn, $GUI_DISABLE) $lockdown = _TimeToTicks(@HOUR, @MIN, @SEC+$lockdelay); the time to exit lockdown ($lockdelay secs) EndIf EndIf Case $guimsg = $saveprefs If GUICtrlRead($prefs_nowpass) = $pword Then GUISetState(@SW_HIDE, $prefs) If IsInt(GUICtrlRead($prefs_lockdelay)) Then $lockdelay = GUICtrlRead($prefs_lockdelay) If IsInt(GUICtrlRead($prefs_maxtries)) Then $maxtries = GUICtrlRead($prefs_maxtries) If StringLen(GUICtrlRead($prefs_pword)) > 0 And GUICtrlRead($prefs_pword) = GUICtrlRead($prefs_pword_verify) Then $pword = GUICtrlRead($prefs_pword) If GUICtrlRead($prefs_autopower) = $GUI_CHECKED Then $autopower = 1 Else $autopower = 0 EndIf ElseIf GUICtrlRead($prefs_nowpass) = '' Then MsgBox(64, 'Error', 'You did not enter your password.') Else MsgBox(16, 'Error', 'Incorrect Password,') EndIf Case $guimsg = $resetprefs GUICtrlSetData($prefs_pword, '') GUICtrlSetData($prefs_pword_verify, '') GUICtrlSetData($prefs_maxtries, $maxtries) GUICtrlSetData($prefs_lockdelay, $lockdelay) If $autopower = 1 Then GUICtrlSetState($prefs_autopower, $GUI_CHECKED) Else GUICtrlSetState($prefs_autopower, $GUI_UNCHECKED) EndIf Case $guimsg = $cancelprefs GUISetState(@SW_HIDE, $prefs) GUICtrlSetData($prefs_pword, '') GUICtrlSetData($prefs_pword_verify, '') GUICtrlSetData($prefs_maxtries, $maxtries) GUICtrlSetData($prefs_lockdelay, $lockdelay) If $autopower = 1 Then GUICtrlSetState($prefs_autopower, $GUI_CHECKED) Else GUICtrlSetState($prefs_autopower, $GUI_UNCHECKED) EndIf Case $guimsg = $quitbtn Quit() EndSelect EndIf If $lockdown <> 0 And _TimeToTicks(@HOUR,@MIN,@SEC) >= $lockdown Then GUICtrlSetState($passbox, $GUI_ENABLE) GUICtrlSetState($passbtn, $GUI_ENABLE) GUISetState(@SW_ENABLE, $dialog) $lockdown = 0; reset the time to exit lockdown EndIf WEnd ;--------------- ;functions below ;--------------- Func FadeIn() If $running = False Then; $running prevents interruption from hotkey If $fade = 'in' Then $running = True GUISetBkColor(0xFFFFFF, $gui) WinSetTrans('Fullscreen', '', 0) GUISetState(@SW_SHOW, $gui) For $i=25 To 100 Step 25; Fade to 100% opacity WinSetTrans('Fullscreen', '', ($i/100)*255) If @error = 1 Then ExitLoop; If OS doesn't support transparency ;~ Sleep(1) Next For $i=0 To 255 Step 5; Fade to black $j = Hex(255-$i,2) GUISetBkColor('0x'&$j&$j&$j, $gui) Sleep(10) Next _CurVisInv(0); Cursor invisible If $autopower = 1 Then MonitorPower(0); Monitor power off $locked = True $fade = 'out' $running = False ElseIf $fade = 'out' Then $running = True If $autopower = 1 Then MonitorPower(1); Monitor power on _CurVisInv(1); Cursor Visible GUISetState(@SW_SHOW, $dialog); show password box $running = False EndIf EndIf Return 1 EndFunc;==> Fade Func FadeOut() If $fade = 'out' Then $running = True $locked = False _CurVisInv(1); Cursor visible MonitorPower(1); Monitor power on ;~ Sleep(2500) For $i=0 To 255 Step 5; Fade to white $j = Hex($i,2) GUISetBkColor('0x'&$j&$j&$j, $gui) Sleep(10) Next GUISetState(@SW_HIDE, $gui) $fade = 'in' $running = False EndIf Return 1 EndFunc;==> FadeOut Func Quit() Exit EndFunc;==> Quit Func MonitorPower($toggle) Opt("WinTitleMatchMode", 4) $WM_SYSCommand = 274 $SC_MonitorPower = 61808 $Power_Off = 2 $Power_On = -1 $HWND = WinGetHandle("classname=Progman") If $toggle = 0 Then DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND, "int", $WM_SYSCommand, "int", _ $SC_MonitorPower, "int", $Power_Off) ElseIf $toggle = 1 Then DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND, "int", $WM_SYSCommand, "int", _ $SC_MonitorPower, "int", $Power_On) EndIf Return 1 EndFunc;==> MonitorPower Func _CurVisInv($bV) Local $cursorinternalc Select Case $bV = 1 Do $cursorinternalc = DllCall("User32.dll", "long", "ShowCursor", "long", $bV) Sleep(1) Until $cursorinternalc[0] > 0 Case $bV = 0 Do $cursorinternalc = DllCall("User32.dll", "long", "ShowCursor", "long", $bV) Sleep(1) Until $cursorinternalc[0] < 0 Case Else Return 0 EndSelect Return 1 EndFunc;==>_CurVisInv1 Func KillClones() $processes = ProcessList('AutoFade.exe') If $processes[0][0] > 1 Then For $i=2 To $processes[0][0] ProcessClose($processes[$i][1]) Next EndIf Return 1 EndFunc Func Preferences() If $fade = 'in' And $running = False Then GUISetState(@SW_SHOW, $prefs); show preferences window EndIf Return 1 EndFunc Edited March 16, 2006 by FifthLobe
nfwu Posted March 16, 2006 Posted March 16, 2006 Very Interesting visual effect. Though not useful, it is interesting... #) TwitterOut of date stuff:Scripts: Sudoku Solver | Webserver | 3D library (Pure AutoIt) | Wood's GadgetsUDFs: _WoodUniqueID() | _DialogEditIni() | _Console*() | _GetIPConfigData() | _URLEncode/Decode()
MSLx Fanboy Posted March 16, 2006 Posted March 16, 2006 There is the Singleton function Writing AutoIt scripts since _DateAdd("d", -2, _NowCalcDate())
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