4

Я ищу способ написания сценария (любого типа), который бы одновременно выводил меня из моей локальной учетной записи Windows, а также немедленно переводил компьютер в режим сна / ожидания. Я нашел решения, которые могут сделать одно или другое, но не выходить из системы, а затем спать все в одном сценарии. Команда SHUTDOWN не предлагает этого, и я не могу найти другие варианты.

Это для Win XP, SP3 прямо сейчас, но когда-нибудь скоро я тоже захочу решение для Windows 7.

Спасибо за любые идеи или объяснения, почему это невозможно. :)

3 ответа3

5

Этот пакетный файл БОЛЬШОЙ! Я добавил несколько настроек, чтобы он работал с Windows XP, а также минимизировал время ожидания запланированной задачи в режиме ожидания. Запланированные задания выполняются только каждую минуту, поэтому я установил максимальное время ожидания 1 мин 15 с. Теперь я могу выйти и перейти в режим ожидания простым нажатием на значок пакетного файла!

Вот как я это сделал, шаг за шагом:

  1. Создайте каталог "C:\MyProg"

  2. Создайте и сохраните текстовый файл "C:\MyProg\Standby.bat"

     rem * Standby *  
     rundll32.exe powrprof.dll,SetSuspendState
    
  3. Создайте и сохраните текстовый файл «C:\MyProg\Logoff-Standby.bat»

     rem * Logoff & Standby *  
     rem  
     rem from http://superuser.com/questions/122432/how-can-i-logoff-and-go-to-stand-by-via-win-xp-script
    
     rem  
     rem * Find time to schedule the standby task *  
     rem  
     rem Get current time hours, minutes, and seconds  
     set curtime=%time%  
     set curhh=%curtime:~0,2%  
     set curhh=%curhh: =%  
     set curmm=%curtime:~3,2%  
     set curmm=%curmm: =%  
     set curss=%curtime:~6,2%  
     set curss=%curss: =%  
     rem Set values for near seconds, minutes, and hours  
     rem Scheduled tasks can only run at a new minute, so bump the time up by 1 min, 15 sec and then round down to zero seconds
     set /a nearss=%curss% + 15  
     set /a nearmm=%curmm% + 1  
     set /a nearhh=%curhh%  
     if %nearss% gtr 59 (  
         set /a nearss=%nearss% - 60  
         set /a nearmm=%nearmm% + 1  
     )  
     if %nearmm% gtr 59 (  
         set /a nearmm=%nearmm% - 60  
         set /a nearhh=%nearhh% + 1  
     )  
     if %nearhh% gtr 23 set /a nearhh=%nearhh% - 24  
     rem Add leading zero to minutes and hours  
     if %nearmm% lss 10 set nearmm=0%nearmm%  
     if %nearhh% lss 10 set nearhh=0%nearhh%  
     rem Set neartime to result rounded down to zero seconds  
     set neartime=%nearhh%:%nearmm%:00  
     rem  
     rem * Schedule task to standby *  
     rem  
     schtasks /create /tn "standby" /tr C:\MyProg\standby.bat /sc once /st %neartime% /ru System  
     rem  
     rem * Logout *  
     rem  
     shutdown -l -f
    
  4. Щелкните правой кнопкой мыши C:\MyProg\Logoff-Standby.bat > Отправить на > Рабочий стол (создать ярлык)

3

Создать командный файл,

schtasks /create /tn "sleep" /tr c:\scripts\sleep.bat /sc once /st %neartime% /ru System
rundll32 user32.dll,ExitWindowsEx

первая строка создает запланированное задание, которое запускает sleep.bat как системный пользователь через 1 минуту. Вторая строка записывает вас.

В файле sleep.bat необходимо добавить следующую строку, которая отправит компьютер в спящий режим.

rundll32.exe powrprof.dll,SetSuspendState

В первом пакетном файле вам нужно выяснить, через какое время он будет через 1 минуту (% neartime%)

set curtime=%time%
set curhh=%curtime:~0,2%
set curhh=%curhh: =%
set curmm=%curtime:~3,2%
set curmm=%curmm: =%
if "%curmm:~0,1%" == "0" set curmm=%curmm:~1,1%
set /a nearmm=%curmm% + 2
set /a nearhh=%curhh%
if %nearmm% gtr 59 (
    set /a nearmm=nearmm% - 60
    SET /A nearhh=%nearhh% + 1
)
if %nearmm% gtr 59 if %nearhh% gtr 23 set /a nearhh=%nearhh% - 24
if %nearmm% lss 10 set nearmm=0%nearmm%
set neartime=%nearhh%:%nearmm%

Это не будет мгновенным, но это будет автоматизировано.

В качестве альтернативы вы можете настроить блокировку своего ПК при выходе из режима сна, и тогда команда режима сна сама заблокирует станцию (хотя это не приводит вас к выходу из системы, она закрыта!)

2

Посмотрите на PsShutdown. Должен делать именно то, что вы хотите.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .