|
Вопрос # 2 083/ вопрос открыт / |
|
Здравствуйте!!! У меня такой вопрос: Как написать программу будильника в Delphi, так чтобы в определёной время компьютер сам включался и выключался? И если можно, то подскажите в какую часть программы его надо вписать. Это моя первая прогрмма. Заранее благодарен!!!
 |
Вопрос задал: 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, так что несохранённые данные могут быть потеряны. Если флаг убрать, то любое приложение может отложить выключение компа и выдать запрос на сохранение данных и/или на подтверждение закрытия.
Приложение: Переключить в обычный режим- procedure KillWindows;
- var
- handle: THandle;
- n: DWORD;
- luid: TLargeInteger;
- priv: TOKEN_PRIVILEGES;
- dummy: PTokenPrivileges;
- ver: TOSVERSIONINFO;
- begin
- ver.dwOSVersionInfoSize := Sizeof(ver);
- GetVersionEx(ver);
- if ver.dwPlatformId=VER_PLATFORM_WIN32_NT
- then begin
- if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, handle)
- then if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid)
- then begin
- priv.PrivilegeCount := 1;
- priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
- priv.Privileges[0].Luid := luid;
- dummy := nil;
- AdjustTokenPrivileges(handle, false, priv, 0, dummy^, n);
- end;
- end;
-
- SaveSettings();
- ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN+EWX_POWEROFF,0);
- 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 (статус: Посетитель), 3 декабря 2008, 19:09 [#4]:
Здравствуйте!!! Я уже к вам обращался по поводу будильника ("Как выключить компьютер"). Не могли бы вы подсказать как перейти к спящему режиму. Я делаю программу-будильник в Delphi. Заранее благодарен.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|