################################################################################################################ # http://autoit-script.ru/autoit3_docs/userappendix/AutoIt3Wrapper.htm # http://autoit-script.ru/threads/kompiljacija-skripta-maksimalno-szhatie.8948/#post-60159 # НЕ использовать X64 версию AutoIt3_x64 или AUT2EXE_x64 #AutoIt3Wrapper_UseX64=n # Уровень сжатия скомпилированного файла *.exe: минимальный=0, максимальный=4 #AutoIt3Wrapper_Compression=0 # Сжатие скомпилированного файла *.exe #AutoIt3Wrapper_UseUpx=n # Имя скомпилированного файла *.exe # #AutoIt3Wrapper_OutFile=!MS_W_7_Twk.exe #AutoIt3Wrapper_OutFile=montOFF_Autoit.exe # Имя файла используемой иконки скомпилированного файла *.exe # #AutoIt3Wrapper_Icon=icon.ico # #AutoIt3Wrapper_Icon=transparent.ico #AutoIt3Wrapper_Icon=offmon.ico ################################################################################################################ #include #include #include #include ; #include Global $iOff = 1 Global $iTimeout = 60 $iMarker = 1 $message = "Monitor budet potushen avtomaticheski posle" & " " & $iTimeout & " " & "sek.!" ; #Include ; Global $interval_timer, $counter ; HotKeySet("{ESC}", "_terminate") ; HotKeySet("{ESC}", "_terminate2") ; HotKeySet("{ESC}", "_terminate3") HotKeySet("{ESC}", "_terminate4") ;HotKeySet('{Esc}', _Exit) Opt('TrayMenuMode', 3) Opt('TrayOnEventMode', 1) TraySetClick(16) ; TrayItemSetOnEvent(TrayCreateItem('Выход/Закрыть'), _Exit) TrayItemSetOnEvent(TrayCreateItem('BbIXOD'), _Exit) TrayItemSetOnEvent(TrayCreateItem('PoraCuTb 3kpaH'), _Monitor_Switch_Second) TraySetState(1) _Monitor_Switch(True) Sleep (1000) ; Global Const $VK_ESCAPE = 0x1B ; Global Const $VK_F12 = 0x7B Global $T1mer = 0 Global $T2mer = 0 While 1 If $iOff Then _Monitor_Switch(True) ; ElseIf Not $iOff And _WinAPI_GetIdleTime() >= $iTimeout * 1000 Then ; ElseIf Not $iOff And (TimerDiff($T2mer) >= $iTimeout * 1000) Then ElseIf Not $iOff And ($T2mer) And (TimerDiff($T2mer) >= $iTimeout * 1000) Then ; $T2mer = 0 ; $T2mer = TimerInit() $iOff = 1 SplashOff() ProgressOff() Sleep (5000) ; ElseIf $iOff = 0 Then ElseIf $iOff = 0 and $iMarker = 1 Then _Msg() $iMarker = 0 EndIf Sleep(10) WEnd Func _terminate4() For $i = $VK_ESCAPE To $VK_ESCAPE If _WinAPI_GetAsyncKeyState($i) < 0 Then If ($T1mer) And (TimerDiff($T1mer) < 250) Then MsgBox("","","double tap detected") $T1mer = 0 $T2mer = 0 _Monitor_Switch(False) $iOff = 0 $iMarker = 1 EndIf EndIf Next $T1mer = TimerInit() $T2mer = TimerInit() EndFunc ;==>Message Func _Monitor_Switch($bOff) Local $hWnd = WinGetHandle('[CLASS:Progman]') Local Const $WM_SYSCOMMAND = 274 Local Const $SC_MONITORPOWER = 61808 Local Const $iOff = 2, $iOn = -1 _SendMessage($hWnd, $WM_SYSCOMMAND, $SC_MONITORPOWER, ($bOff ? $iOff : $iOn)) EndFunc Func _Monitor_Switch_Second() SplashOff() ProgressOff() Sleep (5000) $iOff = 1 _Monitor_Switch(True) ; If $iOff = 0 Then ; _Monitor_Switch(True) ; MsgBox(0,"","") ; $iOff = 1 ; EndIf EndFunc Func _Exit() _Monitor_Switch(False) Exit EndFunc Func _Msg() $Title = "Пожалуйста, подождите..." ; Заголовок $SubTitle = "Происходит уничтожение данных :)" ; Суб-заголовок $Message = "Монитор будет потушен автоматически после" & @CRLF ; Сообщение. Записано в таком виде для удобства $Message &= "" ; $Message = "Все данные на ваших дисках будут уничтожены." & @CRLF ; Сообщение. Записано в таком виде для удобства ; $Message &= "Монитор будет потушен автоматически после" & @CRLF ; $Message &= "" ; $Message = "Система обнаружила использование нелегальной" & @CRLF ; Сообщение. Записано в таком виде для удобства ; $Message &= "копии Windows. Все данные на ваших дисках" & @CRLF ; $Message &= "будут уничтожены." & @CRLF ; $Message &= "Монитор будет потушен автоматически после" & @CRLF ; $Message &= "" & @CRLF $Time = $iTimeout * 1000 ; Время здесь хранится в миллескундах. 1 с = 1000 мс $Sleep = 0.01 * 1000 ; 10 мс. Меньше 1 мс ставить не рекомундуется. Впрочем, тут и 100 мс хватает. $Timer = TimerInit() ; Инициализация таймера. ProgressOn($Title, $SubTitle, $Message & $Time) ; Параметры: заголовок, суб-заголовок, сообщение. Включаем окно прогресса. ; ProgressOn($Title, $SubTitle, $Message & $Time, -1, -1, 16) ; Параметры: заголовок, суб-заголовок, сообщение. Включаем окно прогресса. ; окно может быть перемещено While TimerDiff($Timer) < $Time and $iOff = 0 ; Пока прошло времени меньше чем нужно - повторять: ProgressSet(TimerDiff($Timer) / $Time * 100, $Message & Round(($Time - TimerDiff($Timer)) / 1000, 1) & " секунд") ; ProgressSet ( percent [, "subtext" [, "maintext"]] ) ; Параметр 1: процент прогресса. Прошедшее время делим на требуемое и умножаем на 100 ; Параметр 2: сообщение. Стандартное, как в перменной $Message плюс оставшееся время округлённое до десятых ; Параметр 3: опциональный. Здесь не используется. Sleep($Sleep) ; Подожать $Sleep мс WEnd ; ProgressSet(100, "Шеф! Все пропало. Прощайте.") ; Выводим последнее сообщение. ; Sleep(1000) ; Чтобы было видно последнее сообщение. ; ProgressOff() EndFunc