Урок 33 - Автовыключатель компьютера

   В этом уроке мы создадим программу под названием "рубильник", она будет выключать наш компьютер по расписанию.

   Итак, нам потребуется: 4 Label, 2 Button, DateTimePicker (Win32) и Timer. Располагаем эти компоненты так как на рисунке:

Форма


   Определимся со свойствами, свойство Kind у DateTimePicker установим в dtkTime, и свойство Enabled у Timer выставляем в False.

   Для выключения компьютера служит функция ExitWindowsEx();, но если её написать вот так просто, то ничего не произойдет, она так работала только в Windows98, в более современных системах она работает только когда есть особые привилегия у использующей её программы. Как сделать эти привилегия мы сейчас и узнаем. Для начала создадим процедуру выключения, в разделе Private Form1 объявим процедуру:
...
  private
    { Private declarations }
    Procedure PowerOFF;
...
   Нажмем комбинацию клавиш Shift + Ctrl + C и Delphi сам создаст шаблон для процедуры, его нужно наполнить кодом:
procedure TForm1.PowerOFF;
var  
  TTokenHd: THandle;  
  TTokenPvg: TTokenPrivileges;  
  cbtpPrevious: DWORD;
  rTTokenPvg: TTokenPrivileges;
  pcbtpPreviousRequired: DWORD;  
  tpResult: Boolean;  
const  
  SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; 
begin
//=========== Получаем привилегии ==============//
begin  
  if Win32Platform = VER_PLATFORM_WIN32_NT then  
  begin  
    tpResult := OpenProcessToken(GetCurrentProcess(),  
      TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,  
      TTokenHd);  
    if tpResult then  
    begin  
      tpResult := LookupPrivilegeValue(nil,  
                                       SE_SHUTDOWN_NAME,  
                                       TTokenPvg.Privileges[0].Luid);  
      TTokenPvg.PrivilegeCount := 1;  
      TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;  
      cbtpPrevious := SizeOf(rTTokenPvg);  
      pcbtpPreviousRequired := 0;  
      if tpResult then  
        Windows.AdjustTokenPrivileges(TTokenHd,  
                                      False,  
                                      TTokenPvg,  
                                      cbtpPrevious, 
                                      rTTokenPvg, 
                                      pcbtpPreviousRequired); 
    end; 
  end;
//=============================================//
  ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0); //Выключаем компьютер;
end;
   Все процедура выключения готова, получилась она довольно громадной, зато везде работает. Теперь займемся таймером, создаем его обработчик события и пишем код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  a,b: String;
begin
  Label3.Caption:= TimeToStr(GetTime);  //Получаем текущее время
  Label4.Caption:= TimeToStr(DateTimePicker1.Time - GetTime); //Вычисляем сколько времени осталось до выключения

  a:=  TimeToStr(GetTime); //Присваиваем текущее время
  b:= TimeToStr(DateTimePicker1.Time); //Присваиваем время выключения

  if a = b then  //Если текущее время равно времени выключения то 
	PowerOFF;	 //выполняем процедуру выключения   
end;
   Помните в начале урока мы выключили таймер, сделано это для того, чтобы можно было сначала настроить время а потом запустить таймер. Давайте сделаем управление таймером. Создадим обработчик события OnClick на кнопке "Старт":
procedure TForm1.Button2Click(Sender: TObject);
begin
 Timer1.Enabled:=True; //Включаем таймер
end;  
   Ну и также выключим ,если например ошиблись во времени или передумали, в обработчике на кнопке "Стоп":
procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled:=False;
end;


Через 20 сек компьютер выключится


   Вот у нас получилась такая программа, осталось изменить свойство Caption у Form1 на "Рубильник" и готово! Будьте осторожней с ней :)

Удачи!
Встретимся в следующем уроке!




Добавил(а): Mattew_Pharrel Дата: 2014-08-11
Что такое "token", "tHandle", с чем его едят? Где можна найти информацию по таким вещам? Уж больно занятные вещи(ИМХО).



Добавил(а): Mattew_Pharrel Дата: 2014-08-11
И почему два "begin"`a после обьявления "const"?



Добавил(а): Dragonfly Дата: 2015-01-12
Спасибо за урок) все замечательно, вот только о том как привилегии предоставляются ничего не понял просто скопировал все Кому интересно вот мое творение по этому уроку - (https://drive.google.com/file/d/0BzKVbXO3LSZ9S1ZNMEtOT0dCSzg/view?usp=sharing) Сделал что бы отключить можно было только по паролю, который задается при старте, по другому вырубить можно только через диспетчер(не доработки(не знаю как исправить буду рад совету))


  1. Austinamuck
    Austinamuck a month ago
    Смею предложить эту юридическую компанию, как добросовестного и надежного партнера, готового идти навстречу клиентам.
    Особенно мне понравилась отличительная черта сотрудников фирмы - оперативность в работе и готовность быстро
    реагировать на форс-мажорные обстоятельства, возникшие у заказчиков и подстраиваться к ним. Убедился в этом лично, когда понадобилась услуга [url=http://bankrot.space/]Дело о банкротстве юридического лица рассматривает В Москве[/url].

    Сроки поджимали. В итоге сотрудники проделали всё грамотно, быстро и аккуратно.
    Высокая организованность и профессионализм сотрудников данной юридической фирмы - неукоснительное свидетельство их дальнейшего успеха и востребованности!
  2. Georgewjk
    Georgewjk 23 days ago
    п»ї
    Я пользуюсь CryptoTab Браузером — и вам советую! С ним вы сможете получать BTC, просто посещая любимые сайты или просматривая видео на YouTube. CryptoTab быстр, надежен и обладает удобным интерфейсом. http://bit.ly/2TPy2dj


    https://cryptotabbrowser.com/landing/49/5703690

    https://clck.ru/QB2Wk

    =Crypto=
  3. StatApamb
    StatApamb 20 days ago
    Футболка

    http://merchprint.ru/zhenskiye-hudi/hudi-risunki-i-kartinki-1641055 - Худи
    Старая цена - 1099
    Новая цена - 799
  4. JoshuaBet
    JoshuaBet 18 days ago
    [url=http://bit.ly/3nFQwsX]личный кошелек биткоин[/url]


    Биржа Coinbase сломалась по окончании подъема биткоина выше $20 000. Сан-Франциско, США, 16 декабря 2020, 20:40 — REGNUM Криптовалютная биржа Coinbase оказалась перегружена и не смогла проводить часть операций после подъема биткоина выше $20 000, 16 декабря информирует агентство Reuters. Зарегистрированная в Калифорнии Coinbase сказала, что «исправляет ситуацию» , возникшую с продажей криптовалют на розничной платформе. Как сообщало ИА REGNUM , ранее криптовалюта Bitcoin поднялась в цене выше $20 000 в первый раз за время существования. Максимум торгов биткоина пока образовывает около $20 800.
    [url=http://bit.ly/3mWmalc]биткоин кошелек на русском[/url]
  5. Mustinqks
    Mustinqks 15 days ago
    [url=http://bit.ly/2JBFtzq]регистрация и создание ооо[/url]

    Всем привет.
    В свое время я взял большой кредит. Всё было хорошо, пока не пришли сложные времена.
    У меня образовалась проблема с возвратом кредитных средств.
    Пришлось много поискать защиту среди различных юридичесикх контор.
    Удача повернулась ко мне. Я нашёл её...Ту самую, которая решила все мои проблемы.
    Мне понадобилась услуга [url=http://bit.ly/2JBFtzq]договор купли продажи по доверенности квартира[/url]
    .
    Сначала я обрисовал всё на сайте, где меня бесплатно проконсультировали.
    После заключения договора с данной фирмой, специалисты этой фирмы консультировали меня по всем вопросам
    и вели полное сопровождение на протяжении всего процесса.
    Всё очень организованно и профессионально сделали сотрудники этой юридической конторы.
    Мои проблемы были решены за короткий срок.

    Молодцы! Просто нет слов, настолько все четко сделано, честно говоря неожиданно. Такое качество за такие сроки!
    Большое вам спасибо.

    Рекомендую!
    [url=http://bit.ly/2JBFtzq]как писать научную статью[/url]

    Консультации по телефонам:

    Москва, Московская область 8 (499) 350-55-06 доб. 238
    Санкт-Петербург, Ленинградская область 8 (812) 309-06-71 доб. 793
    Федеральный номер 8 (800) 555-67-55 доб. 779
    Краснодарский край 8 (861) 203-64-41 доб. 767
    Свердловская область 8 (343) 318-28-46 доб. 776
    Воронежская область 8 (473) 204-54-67 доб. 765
    Новосибирская область 8 (383) 280-46-81 доб. 764
    Нижегородская область 8 (831) 429-17-72 доб. 771
    Волгоградская область 8 (844) 278-04-56 доб. 769
    Республика Башкортостан 8 (347) 214-53-29 доб. 764
    Красноярский край 8 (391) 204-65-59 доб. 767
    Ростовская область 8 (863) 303-61-49 доб. 771
    Ульяновская область 8 (842) 224-21-78 доб. 764
    Челябинская область 8 (351) 202-13-44 доб. 770
    Ставропольский край 8 (865) 220-71-53 доб. 751

    [URL=http://bastionconsult.ru/?wmid=14299][IMG]http://static.leadia.org/banners/240x400.png[/IMG][/URL]
  6. JoshuaBet
    JoshuaBet 2 days ago
    [url=http://bit.ly/3mWmalc]биткоин кошелек вход личный кабинет[/url]


    Bitcoin-кошелек «Blockchain» Bitcoin-кошелек «Blockchain» имеет несколько примечательных защитных функций от угроз, характерных для онлайн-кошельков. Например, Blockchain поддерживает осуществляемую клиентом AES-шифровку, которая защищает кошелек от хакерства со стороны сервера. Он также поддерживает оффлайн-транзакции, функцию двойной шифровки и двухфакторное подтверждение подлинности. Blockchain не только машинально помещает кошелек на Гугл Drive или Dropbox, но также позволяет загружать кошелек вручную. Помимо того, Blockchain совершает ежечасную удаленную синхронизацию с сервером. Имеется мобильная версия кошелька Blockchain для Android, iPhone и iPad.
    [url=http://bit.ly/3mWmalc]транзакции биткоин кошелька[/url]


    [url=https://hangulatjelek.eoldal.hu/cikkek/msn-hangulatjelek-3.html#block-comments]Биткоин кошелек какой выбрать[/url]
    [url=https://forum.zakon.kz/topic/68157-%D1%81%D1%80%D0%BE%D0%BA%D0%B8-%D1%83%D0%BF%D0%BB%D0%B0%D1%82%D1%8B-%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D1%85-%D1%88%D1%82%D1%80%D0%B0%D1%84%D0%BE%D0%B2/?page=8#comment-1522888]Адрес биткоин кошелька[/url]
    [url=https://devayser.com/drl-2-plus-controller.html#4050]Coinbase кошелек на русском[/url]
    [url=https://posobie.net/subsidii/programma-molodaja-semja-v-hmao.html#comment-43827]Coinbase перевод[/url]
    [url=https://forum.zakon.kz/topic/8010-%D0%B2%D0%B8%D0%B4-%D0%BD%D0%B0-%D0%B6%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE-%D0%B8-%D0%B3%D1%80-%D0%BA%D0%B0%D0%B7%D0%B0%D1%85%D1%81%D1%82%D0%B0%D0%BD%D0%B0/?page=3#comment-1522844]Биткоин wallet кошелек[/url]
    97305aa
Отменить.