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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 2 083

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

Здравствуйте!!! У меня такой вопрос: Как написать программу будильника в Delphi, так чтобы в определёной время компьютер сам включался и выключался? И если можно, то подскажите в какую часть программы его надо вписать. Это моя первая прогрмма. Заранее благодарен!!!

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

Вопрос задал: kuan (статус: Посетитель)
Вопрос отправлен: 12 ноября 2008, 18:48
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: ANBsoft

Здравствуйте, kuan!
Выключить компьютер ничего сложного нет (имея в системе права админа или хотя бы Power-User).
Но включить программно может быть две возможности:
1)Включение по таймеру из БИОС, но не все биосы это поддерживают и Вы не сможете работать с БИОС из своей программы.
2)Включение по прерыванию, которое посылает внешнее устройство (например через COM-порт), а Вы в свою очередь программно управляете этим устройством и задаете когда оно должно выдать прерывание для компьютера.
Итого: первое - невозможно, второе - возможно, но это уже программно-аппаратное решение (тоесть нужно уметь работать с микроконтролерами и прочее), а это уже задача не для начинающих.

Ответ отправил: ANBsoft (статус: Студент)
Время отправки: 12 ноября 2008, 19:56

Ответ #2. Отвечает эксперт: min@y™

Выключить комп - юзай функцию ExitWindowsEx(). Пример - в приложении.
Имей в виду, там (в примере) стоит флаг EWX_FORCE, он означает, что система не быдет посылать запущенным программам сообщения WM_QUERYENDSESSION и WM_ENDSESSION, так что несохранённые данные могут быть потеряны. Если флаг убрать, то любое приложение может отложить выключение компа и выдать запрос на сохранение данных и/или на подтверждение закрытия.

Приложение:
  1. procedure KillWindows;
  2. var
  3. handle: THandle;
  4. n: DWORD;
  5. luid: TLargeInteger;
  6. priv: TOKEN_PRIVILEGES;
  7. dummy: PTokenPrivileges;
  8. ver: TOSVERSIONINFO;
  9. begin
  10. ver.dwOSVersionInfoSize := Sizeof(ver);
  11. GetVersionEx(ver);
  12. if ver.dwPlatformId=VER_PLATFORM_WIN32_NT
  13. then begin
  14. if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, handle)
  15. then if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid)
  16. then begin
  17. priv.PrivilegeCount := 1;
  18. priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
  19. priv.Privileges[0].Luid := luid;
  20. dummy := nil;
  21. AdjustTokenPrivileges(handle, false, priv, 0, dummy^, n);
  22. end;
  23. end;
  24.  
  25. SaveSettings();
  26. ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN+EWX_POWEROFF,0);
  27. end;


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 13 ноября 2008, 08:56


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

Всего сообщений: 4; последнее сообщение — 3 декабря 2008, 19:09; участников в обсуждении: 4.
Аксион

Аксион (статус: 4-ый класс), 12 ноября 2008, 18:51 [#1]:

Может сначала стоит книгу прочитать или начать с более простых задач?Раз даже куда писать не знаете....
Вадим К

Вадим К (статус: Академик), 12 ноября 2008, 19:03 [#2]:

А в розетку тоже что бы тыкал штекер?:)
Галочка "подтверждения прочтения" - вселенское зло.
Ученый

Ученый (статус: 8-ой класс), 12 ноября 2008, 19:04 [#3]:

да народ! ну вы даете! Первые программы надо таки как: на фоме при запуске появляется надпись "Hello, world". Ладно шутить все любим! Теперь серьезно! Боюсь для первой программы вам это будет сложно. Что бы ее сделать придется порядком погуглить, поюзать по сотням ссылок и только тогда эта задача будет осуществима!
kuan

kuan (статус: Посетитель), 3 декабря 2008, 19:09 [#4]:

Здравствуйте!!! Я уже к вам обращался по поводу будильника ("Как выключить компьютер"). Не могли бы вы подсказать как перейти к спящему режиму. Я делаю программу-будильник в Delphi. Заранее благодарен.

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

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