ruomyes
BANNED | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Делал мануальчик как-то для себя по способам выключения компьютера и заодно хотел поделиться на форуме, но не закончил. И теперь вряд ли уже когда доделаю. Поэтому выкладываю то, что удалось собрать и протестировать, может кому пригодится. В Windows XP существует несколько способов перезагрузки компьютера: 1. Через меню "Пуск" - "Выключить компьютер" или "Диспетчер задач Windows" - "Завершение работы". 2. С помощью системных утилит shutdown.exe и tsshutdn.exe или утилит от сторонних производителей. 3. С помощью скриптов VBScript и JScript. 4. Другие экзотические способы. Режимы завершения работы Windows в свою очередь подразделяются на: 1. Системные режимы: - Завершение работы до сообщения "Питание компьютера можно отключить" (на AT, на ATX выключение) aka Shutdown - Перезагрузка компьютера aka Reboot или только Windows в 9x/ME (с зажатым Shift) aka Restart - Выход из Windows (завершение пользовательского сеанса) aka Log off - Блокировка рабочей станции (смена пользователя) aka Lock Workstation (вызывается по Win+L, только NT и выше) 2. Профили питания: - Ждущий режим (режим ожидания, сон) aka StandBy (S1-S3) / Sleeping (Suspend to RAM) - Спящий режим (гибернация) aka Hibernate (S4) / Sleeping (Suspend to disk) - полноценно только в 2k и выше - Гибридный режим (нечто среднее между ждущим и спящим) aka Hybrid (только Windows Vista и выше) - Завершение работы с выключением компьютера (на ATX, на AT перезагрузка) aka Soft off (S5) / Power off / Turn off Завершение работы с помощью утилиты shutdown.exe (Windows XP и выше): --------------------------------------------------------------------- "shutdown.exe -s -f -t 0" - форсированное выключение, без ожидания пользовательских подтверждений, где -t 0 это время, после которого произойдет выключение (по умолчанию, если параметр -t не указан, это 30 секунд); если параметр -t отличается от 0, параметр -f (форсированно) применяется автоматически, т.е. можно не указывать "shutdown.exe -r -f -t 0" - форсированная перезагрузка "shutdown.exe -l" - завершение сеанса (в XP ошибочно форсированно, параметр -f здесь работает обратно своей функции, отменяя форсирование, исправлено в Windows 2003 и выше), параметр -t игнорируется "shutdown.exe -p" - выключение питания (Power off) без ожиданий и предупреждений, доступно только в 2003 и выше (в XP только, если использовать экзешник от 2003), оригинальное описание параметра: Turn off the local computer with no time-out or warning. Can be used with /d and /f options. (в 2003 параметр /f ошибочно не указан) "shutdown.exe -h" - гибернация, может использоваться с параметром -f, доступна только в 2003 и выше (в XP только, если использовать экзешник от 2003), оригинальное описание параметра: Hibernate the local computer. This can only be used with the /f option. Эквивалентно меню "Пуск" - "Выключить компьютер" - "Спящий режим" (с кнопкой Shift) "shutdown.exe -g" - перезагрузка с перезапуском всех запущенных до перезагрузки программ, доступна только в Vista и выше, оригинальное описание параметра: Shutdown and restart the computer. After the system is rebooted, restart any registered applications. "shutdown.exe -a" - отмена операции, возможна только в течение периода, указанного параметром -t "shutdown.exe -i" - запуск программы в режиме GUI Утилита shutdown.exe из состава Windows XP или Windows 2003 также может использоваться и в Windows 2000. Завершение работы с помощью утилит tsshutdn.exe, tsdiscon.exe и rundll32.exe (Windows XP и выше): ------------------------------------------------------------------------------------------------- "tsshutdn.exe 0" - выключение (не форсированно, где 0 это время, после которого произойдет выключение; по умолчанию, если параметр не указан, это 60 секунд, в течении которых операцию можно отменить, нажав Ctrl+C в консоли) "tsshutdn.exe 0 /powerdown /delay:0" - выключение питания (Power Off), форсированно, без ожидания пользовательских подтверждений, где /delay 0 это дополнительная задержка перед выполнением операции, по умолчанию равная 30 секундам) "tsshutdn.exe 0 /reboot /delay:0" - перезагрузка (форсированно), иногда выливается в перезагрузку только текущего сеанса без полного выхода из системы "tsdiscon.exe" - смена пользователя (также доступна по команде "rundll32.exe user32.dll,LockWorkStation" или комбинации Win+L, но способ немного отличается и чуть дольше по времени) "rundll32.exe powrprof.dll,SetSuspendState" - гибернация или ждущий режим (если гибернация отключена в системе), отключить гибернацию можно как в настройках электропитания так и с помощью команды "powercfg.exe /hibernate off" или "powercfg.exe /h off", последний способ рекомендуется для Windows Vista и выше, т.к. отключения через Панель управления на этих системах недостаточно Утилиты tsshutdn.exe и tsdiscon.exe предназначены для завершения работы серверов, использовать их на домашних компьютерах нецелесообразно. Исполняемые файлы этих утилит из состава Windows XP можно использовать и в серверных редакциях Windows 2000 (в Windows 2000 Professional нет, т.к. для работы требуются Службы терминалов), однако утилита tsdiscon.exe в Windows 2000 на практике не работает. В Windows 2k также работает указанная команда с rundll32. Экзешник powercfg.exe от Windows XP также запускается под Win 2k, но его функциональность под вопросом. Завершение работы с помощью rundll32.exe (Windows 9x/ME/NT): - в этом разделе каша полная, недотестил... ------------------------------------------------------------ rundll.exe user.exe,Restart - пеpезагpузка компьютеpа rundll(32).exe user.exe,RestartWindows - пеpезагpузка только Windows rundll32.exe msgina.dll,ShellShutdownDialog - вызов диалога «Завершение работы Windows XP» rundll32.exe shell32.dll,#60 - вызов окна завершения работы rundll32.exe shell32.dll,#54 - вызов окна смены пользователя rundll(32).exe shell.dll,RestartDialog - завершение работы (нефорсированное) с запросом (хотя д.б. перезагрузка) rundll(32).exe user32.dll,ExitWindowsEx - завершение сеанса (форсированное) rundll(32).exe shell32.dll,SHExitWindowsEx - завершение сеанса (нефорсированное) rundll(32).exe shell32.dll,SHExitWindowsEx 0 - завершение сеанса (нефорсированное) rundll(32).exe shell32.dll,SHExitWindowsEx 1 - завершение работы (нефорсированное) rundll(32).exe shell32.dll,SHExitWindowsEx 2 - перезагрузка (нефорсированная) rundll(32).exe shell32.dll,SHExitWindowsEx 3 - завершение работы с выключением компьютера (нефорсированное) rundll(32).exe shell32.dll,SHExitWindowsEx 4 - завершение сеанса (форсированное) rundll(32).exe shell32.dll,SHExitWindowsEx 5 - завершение работы (форсированное) rundll(32).exe shell32.dll,SHExitWindowsEx 6 - перезагрузка (форсированная) rundll(32).exe shell32.dll,SHExitWindowsEx 7 - завершение работы с выключением компьютера (форсированное) rundll(32).exe user.exe(dll),ExitWindows - завершение работы (нефорсированное) (в XP – смена пользователя) rundll(32).exe user.exe(dll),#7 - завершение работы (нефорсированное) (using the Win32 API) rundll.exe user.exe(dll),ExitWindowsExec - перезагрузка только ОС (нефорсированная) rundll(32).exe krnl386.exe,ExitKernel - немедленное завершение работы (форсированное) rundll(32).exe powrprof.dll,SetSuspendState - ждущий режим (проверить не удалось) runonce.exe -q - перезагрузка (нефорсированная) после 15 секундной задержки Команды перезагрузки и выключения компьютера через rundll32 в Windows 2000 и выше не работают (только в 9x/ME/NT). Завершение работы с помощью утилиты ping.exe (Windows XP и выше): ----------------------------------------------------------------- "ping.exe -n 0 127.0.0.1>nul&wmic OS WHERE Primary="TRUE" CALL Win32Shutdown X" - нестандартный способ завершения, выполняемый из окна cmd (через "Пуск" - "Выполнить" команда не сработает), где X это число, соответствующее режиму завершения: 0, 4 - завершение сеанса, 1, 5 - выключение, 2, 6 - перезагрузка, 8, 12 - выключение питания (второе число после запятой это форсированный режим, может указываться в виде "первое число + 4", т.е. 0 + 4, 1 + 4, 2 + 4, 8 + 4), вместо "Win32Shutdown 2" можно использовать параметр "Reboot" (нефорсированная перезагрузка) Завершение работы с помощью скриптов VBScript и JScript: -------------------------------------------------------- Для завершения работы можно использовать специальные скрипты VBScript и JScript. Как и в предыдущем способе в них используются команды Win32Shutdown и Reboot с теми же числовыми значениями. Пример скрипта VBScript с уведомлением о перезагрузке. Message = "Вы хотите перезагрузить компьютер?" YesNo = MsgBox(Message, vbYesNo) if YesNo = vbYes Then set objWMIService = GetObject("winmgmts:{(Shutdown)}") set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem") for each objOperatingSystem in colOperatingSystems objOperatingSystem.Win32Shutdown(2) next end if Вместо Win32Shutdown(2) можно использовать параметр Reboot. Для других операций по завершению работы (выключение, завершение сеанса, и т.п.) меняем число в параметре Win32Shutdown() на одно из указанных в предыдущем способе и переписываем текст уведомления. Если уведомление не нужно, удаляем из скрипта первые три и последнюю строчки. Объекты colOperatingSystems и objOperatingSystem можно заменить на colSoftware и objSoftware соответственно. Можно также сделать скрипт, который будет просто выводить окно завершения работы: Dim objShell set objShell = CreateObject("Shell.Application") objShell.ShutdownWindows set objShell = nothing Аналогичный скрипт на JScript выглядит следующим образом: (new ActiveXObject("Shell.Application")).ShutdownWindows(); Для создания файла скрипта, копируем текст скрипта в текстовый файл и сохраняем его с расширением .vbs или .js. Завершение работы с помощью сторонних утилит: - также не оттестировал как следует... --------------------------------------------- psshutdown.exe -s -t 00 - shutdown psshutdown.exe -d -t 00 - sleep psshutdown.exe -k -t 00 - poweroff psshutdown.exe -r -t 00 - restart psshutdown.exe -h -t 00 - hibernate psshutdown.exe -o -t 00 - logoff (на XP выключает компьютер, т.е. выполняется shutdown вместо logoff) psshutdown.exe -l -t 00 - lock Можно добавить ключи -f (форсированно) и -m (уведомление о перезагрузке), -t 00 - это время ожидания до перезагрузки. nircmdc.exe exitwin poweroff nircmdc.exe exitwin shutdown nircmdc.exe exitwin logoff nircmdc.exe lockws nircmdc.exe initshutdown "" 0 nircmdc.exe initshutdown "" 0 reboot nircmdc.exe abortshutdown - отмена завершения работы, вызванного командой initshutdown К exitwin и initshutdown можно добавить force (форсированно) или forceifhung (завершать принудительно, только если приложение зависло, используется только с exitwin), в кавычках прописывается сообщение о перезагрузке или оставляется как есть, 0 - время ожидания до перезагрузки. Все способы по идее должны работать и на более поздних операционках, чем XP, но не проверял... |