1

Тема: AutoIt v3: Автоматическое отключения компьютера после простоя

Смысл идеи прост - подмена заставки Windows скомпиллированным скриптом-псевдозаставкой, который автоматически запустится после заданного интервала простоя(в соответствии с настройками заставки) и выполнит требуемые операции, например выключит компьютер.

-----------------------------------
Без гарантий. Используете на свой страх и риск.

Скрипт автоматического выключения компьютера через заданный промежуток времени после простоя. После компилляции скрипта scrpoff.au3 в исполняемый EXE, следует изменить расширение EXE на SCR, после чего установить полученную псевдозаставку через пункт "Установить" контекстного меню Проводника, что равносильно команде rundll32.exe desk.cpl,InstallScreenSaver %l. Далее следует настроить задержку включения псевдозаставки в свойствах "Экран" - "Заставка". После автоматического запуска, скрипт-псевдозаставка начнет отсчет дополнительного простоя в минутах (простой указан в файле scrpoff.ini, который расположен рядом со скриптом), по истечении которого компьютер будет автоматически выключен. Чтобы прервать исполнение псевдозаставки и остановить отсчет простоя достаточно сдвинуть курсор мыши.

Таким образом суммарный интервал простоя, по прошествии которого компьютер будет выключен равен задержке включения псевдозаставки плюс интервалу простоя, указанному в файле scrpoff.ini

scrpoff.au3:

#NoTrayIcon;
 ;----------------------------------------------------------------------
 Const $PWR_FORCE = 4        ;Принудительное завершение процессов
 Const $PWR_POWER_OFF = 8    ;Выключение питания

 Const $txt = ' Идет подготовка к выключению компьютера...' & @CRLF & 'Для отмены переместите курсор мыши...';
 
 $MyIni = @ScriptDir & '\scrpoff.ini';

 ;/Задержка выключения в минутах читается из ini файла/
 $MaxTimeout = Int(IniRead ($MyIni, 'shutdown', 'timeout', 10));
 ;----------------------------------------------------------------------
 Sleep(100);
 SplashTextOn('', $txt, 500, 100, -1, -1, 1+32, 'Verdana', 10);
 Sleep(100);

 ;/Цикл дополнительного простоя/
 ;----------------------------------------------------------------------
 $StartTimer = TimerInit();
 Sleep(100);
 $MPos2 = MouseGetPos();

 While 1
     ;--------------------------------------------------------------
     $Diff = Int(TimerDiff($StartTimer)/(6e+4));
     If $Diff>$MaxTimeout Then ShutdownMachine(); ExitLoop;
     ;--------------------------------------------------------------
     $MPos1 = MouseGetPos();
     If BitXor($MPos1[0],$MPos2[0]) Or BitXor($MPos1[1],$MPos2[1]) Then ExitLoop;
     Sleep(200);
     $MPos2 = MouseGetPos();
     If BitXor($MPos1[0],$MPos2[0]) Or BitXor($MPos1[1],$MPos2[1]) Then ExitLoop;
     ;--------------------------------------------------------------
 Wend 
 Exit;
 ;----------------------------------------------------------------------

 ;[Выключение ПК]
 ;----------------------------------------------------------------------
 Func ShutdownMachine()
     SplashOff();
    Sleep(300);
    Shutdown ($PWR_FORCE + $PWR_POWER_OFF);
 EndFunc
 ;----------------------------------------------------------------------
 ;pltrgst 2010

scrpoff.ini(расположен рядом с откомпиллированным скриптом):

;Интервал простоя после запуска псевдозаставки, минут. 
;По истечении интервала простоя компьютер будет выключен.
[shutdown]
timeout = 1

/Настройки параметров питания/
Переход компьютера в ждущий/спящий режимы должен быть запрещен.

Отключение монитора и жестких дисков допустимо раньше, нежели включение псевдозаставки.

Lang. AutoIt v3
Тестировалось на OC WinMe
-----------------------------------