Артур-1
Мастер
[HR][/HR]
В этом уроке мы создадим программу под названием "рубильник", она будет выключать наш компьютер по расписанию.
Итак, нам потребуется: 4 Label, 2 Button, DateTimePicker (Win32) и Timer. Располагаем эти компоненты так как на рисунке:
Определимся со свойствами, свойство Kind у DateTimePicker установим в dtkTime, и свойство Enabled у Timer выставляем в False.
Для выключения компьютера служит функция ExitWindowsEx();, но если её написать вот так просто, то ничего не произойдет, она так работала только в Windows98, в более современных системах она работает только когда есть особые привилегия у использующей её программы. Как сделать эти привилегия мы сейчас и узнаем. Для начала создадим процедуру выключения, в разделе Private Form1 объявим процедуру:
Нажмем комбинацию клавиш Shift + Ctrl + C и Delphi сам создаст шаблон для процедуры, его нужно наполнить кодом:
Все процедура выключения готова, получилась она довольно громадной, зато везде работает.Теперь займемся таймером, создаем его обработчик события и пишем код:
Помните в начале урока мы выключили таймер, сделано это для того, чтобы можно было сначала настроить время а потом запустить таймер. Давайте сделаем управление таймером. Создадим обработчик события OnClick на кнопке "Старт":
Ну и также выключим ,если например ошиблись во времени или передумали, в обработчике на кнопке "Стоп":
Вот у нас получилась такая программа, осталось изменить свойство Caption у Form1 на "Рубильник" и готово! Будьте осторожней с ней
Удачи!
В этом уроке мы создадим программу под названием "рубильник", она будет выключать наш компьютер по расписанию.
Итак, нам потребуется: 4 Label, 2 Button, DateTimePicker (Win32) и Timer. Располагаем эти компоненты так как на рисунке:
Определимся со свойствами, свойство Kind у DateTimePicker установим в dtkTime, и свойство Enabled у Timer выставляем в False.
Для выключения компьютера служит функция ExitWindowsEx();, но если её написать вот так просто, то ничего не произойдет, она так работала только в Windows98, в более современных системах она работает только когда есть особые привилегия у использующей её программы. Как сделать эти привилегия мы сейчас и узнаем. Для начала создадим процедуру выключения, в разделе Private Form1 объявим процедуру:
Код:
...
private
{ Private declarations }
Procedure PowerOFF;
...
Код:
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;
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled:=True; //Включаем таймер
end;
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=False;
end;
Удачи!
Автор: Савельев Александр
Последнее редактирование:
