Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 840

/ вопрос открыт /

Приветствую, уважаемые эксперты!
У меня такая проблема. Хочу написать программу по выводу компьютера из "спящего" режима и, соответственно, вводу его в этот летаргический сон....
Не подскажите КАК мне это сделать?! а?!

Может как-нибудь можно использовать планировщик, встроенный в Винду?! Буду рад, если скажете как им управлять из-под Дельфи!

Grin Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Grin (статус: Посетитель)
Вопрос отправлен: 9 августа 2007, 04:06
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Градов Ю.М.

Здравствуйте, Grin!
В приложении фрагмент кода для перевода ПК в спящий режим. Также можно выполнить из Delphi файл, как описано ниже:
Управление параметрами электропитания из командной строки
Возможно, вам пригодится знание как можно выключить компьютер, перезагрузить, выйти из системы, перейти в ждущий режим из командной строки. Также эти команды могут быть использованы в пакетных файлах или качестве параметров ярлыков.

rundll32.exe powrprof.dll,setsuspendstate - переход в спящий режим
rundll32.exe user32.dll,lockworkstation - выход из системы

Также можно использовать команду shutdown - эта команда позволяет выключать или перезапускать локальный или удаленный компьютер. Параметры:

shutdown [-l] [-s] [-r| [-a] [-f] [-m [\\имя_компьютера]] [-t xx] [-c "сообщение"]
- l осуществляет выход текущего пользователя из системы;
-s выключает локальный компьютер;
-r выполняет перезагрузку;
-f принудительно закрывает выполняющиеся приложения;
-m [\\имя_компьютера] указывает компьютер, который требуется выключить;
-t xx устанавливает таймер завершения работы системы на xx секунд. По умолчанию это время составляет 20 секунд. Если значение xx указать равным "0" то окно закрытия выводиться не будет;
-c "сообщение" задает сообщение, выводящееся в области «Сообщение» в окне «Завершение работы системы». Можно использовать до 127 знаков. Текст сообщения должен быть заключен в прямые кавычки.
При использовании команды shutdown -i будет отображен интерфейс программы завершения работы.

Пример (выключаем компьютер через 40 секунд с выводом сообщения):
shutdown -s -t 40 -c "Тестовое выключение компьютера"

Замечу, что все возможности команды shutdown доступны пользователю с правами администратора, обычный пользователь может использовать лишь ключ -l, то есть выход из системы. Чтобы разрешить пользователям использовать все возможности команды shutdown, нужно воспользоваться оснасткой "Локальная политика безопасности" (..\windows\system32\secpol.msc). Перейдите в раздел "Локальные политики - Назначение прав пользователя - Принудительное удаленное завершение" и добавьте пользователя или группу пользователей, для которых вы хотите задать разрешение.

Другая команда - tsshutdn служит для завершения работы сервера.
Параметры:

tsshutdn [wait_time] [/server:servername] [/reboot] [/powerdown][/delay:logoffdelay] [/v]
wait_time задержка в секундах после уведомления пользователей до прекращения их сеансов (по умолчанию 60 секунд);
/server:servername завершающий работу сервер (по умолчанию текущий);
/reboot перезагрузка сервера после прекращения всех сеансов;
/powerdown подготовка сервера к отключению питания;
/delay:logoffdelay задержка в секундах после прекращения всех подключенных сеансов (по умолчанию 30 секунд);
/v вывод сообщений о выполняемых действиях;
Команда tsshutdn без параметров завершит работу сервера через 1 минуту.

Пример использования (выключение компьютера, таймаут ="0" секунд)
tsshutdn 0 /powerdown /delay:0

Приложение:
  1. procedure NTSleep;
  2. var
  3. hToken: THandle;
  4. tkp: TTokenPrivileges;
  5. ReturnLength: Cardinal;
  6. begin
  7. if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
  8. TOKEN_QUERY, hToken) then
  9. begin
  10. LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
  11. tkp.PrivilegeCount := 1;
  12. tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
  13. if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength) then
  14. SetSystemPowerState(true, true);
  15. end;
  16. end;
  17.  


Ответ отправил: Градов Ю.М. (статус: 8-ой класс)
Время отправки: 9 августа 2007, 13:57


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:58
Выполнено за 0.02 сек.