• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Cooltrayicon, Ttimer и выключение компьютера

  • Автор темы Serge J.
  • Дата начала
S

Serge J.

Приветствую,

Подскажите пожалуйста как разрулить ситуацию.
Имеется программа, висящая в трэе (через CoolTrayIcon), но при попытке перегрузиться или выключить комп программа закрывается, но сам процесс (перегрузки) отменяется и приходится второй раз shutdown вызывать. В программе используется стандартный компонент TTimer и эксперименты показали, что если на форме этого таймера нет, то перегрузка проходит нормально.

вот код который я использую для отлова shutdown-а (может что тут и лишнее, я в delphi не силен)

type
TForm1 = class(TForm)
...
private
procedure WMQueryEndSession (var Msg: TWMQueryEndSession); message WM_QueryEndSession;
procedure WMEndSession(var Msg: TWMEndSession);message WM_EndSession;
...
procedure TForm1.WMEndSession(var Msg: TWMEndSession);
begin
coolTrayIcon1.Free;
Timer1.Free;
xmlConfig.Free;
XMLDoc.Free;
NMHTTP1.Free;
Msg.Result:= 1;
frmAbout.Close;
Form1.Close;
end;

procedure TForm1.WMQueryEndSession (var Msg: TWMQueryEndSession);
begin
coolTrayIcon1.Free;
Timer1.Free;
xmlConfig.Free;
XMLDoc.Free;
NMHTTP1.Free;
Msg.Result:= 1;
frmAbout.Close;
Form1.Close;
end;

...
 
S

Serge J.

сократил код до такого, приложение закрывается, но все равно винда не перегружается :)

procedure WMQueryEndSession (var Message: TWMQueryEndSession); message WM_QueryEndSession;

procedure TForm1.WMQueryEndSession (var Message: TWMQueryEndSession);
begin
inherited;
Message.Result:= 1;
PostMessage( Application.Handle, wm_Quit, 0, 0);
end;
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!