Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.17;
Скачать: CL | DM;

Вниз

Как отследить завершение работы в API приложении?   Найти похожие ветки 

 
Mazenrat   (2002-09-04 15:17) [0]

Привет.
Вообщем приложение не имеет VCL компонентов. Нужно отследить момент завершения работы приложения. Точнее нужно отследить момент завершения Windows, и, если пользователь собирается выключить компьютер - программа должна вывести диалог запроса. Если пользователь нажимает кнопку YES - разрешаем выключение, если NO - отменяем. С помощью VCL компонентов это делается элементарно:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
//Спрашиваем пользователя, если инициировано завершение работы.
if MessageDlg("Вы уверены?", mtConfirmation, mbYesNoCancel, 0) = mrYes
then CanClose := true //Разрешаем завершение работы.
else CanClose := false; //Nе разрешаем завершение работы.
end;


Вопрос в том как это сделать в API приложении? Спасибо за внимание.


 
Игорь Шевченко ©   (2002-09-04 16:41) [1]

Обрабатывать сообщение WM_QUERYENDSESSION. Оно посылается при окончании сеанса пользователя или перезагрузке.


 
Mazenrat   (2002-09-04 17:05) [2]

Пожалуйста, поподробнее, а то я не очень в АЙПИ, только первые попытки... Пример бы с комментариями не помешал.


 
Виктор Щербаков ©   (2002-09-04 17:13) [3]

Mazenrat (04.09.02 17:05)
Цикл обработки сообщений есть?
Если есть, то непонятно в чем проблема.
Обработай WM_QUERYENDSESSION так, как нужно.


 
Mazenrat   (2002-09-04 17:25) [4]

Есть:

//Цикл обработки сообщений
repeat
waitMessage;
while GetMessage(Msg, 0, 0, 0) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
//Горячие клавишы
if msg.message = WM_HOTKEY then
case msg.wParam of
idHK1 : messageBox(0,"HotKey1","hotkey",MB_OK);
end;

//Так?
if msg.message = WM_QUERYENDSESSION then
if MessageBox(0, "Initialisation failed", NIL, ID_YESNO) = ID_Yes
then ;
else ;


end;
//Убираем за собой значок
TaskBarDeleteIcon(hWnd, ICON_ID);
Halt(Msg.wParam);
until FALSE;
unregisterHotKey(0,idHK1);
end.


 
Виктор Щербаков ©   (2002-09-04 17:42) [5]

Вроде бы так. Только здесь важен возвращаемый результат.
Т.е. If an application can terminate conveniently, it should return TRUE; otherwise, it should return FALSE.


 
Mazenrat   (2002-09-04 17:56) [6]

При завершении работы Windows ничего не происходит. Windows всё преспокойненько закрывает.



Страницы: 1 вся ветка

Текущий архив: 2002.10.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
8-56236
Ivanovich
2002-06-14 08:01
2002.10.17
Как изменить вид формы


1-56219
kerrik
2002-10-07 23:30
2002.10.17
Можно ли покрасить закладки PageControl-а, именно закладки...


1-56153
Осирис
2002-10-07 10:55
2002.10.17
Форма в DLL.


1-56029
Andrew__S
2002-10-08 09:41
2002.10.17
Есть ли в Delphi аналог билдеровской функции .c_str() ?


1-56154
AndreyAG
2002-10-07 10:22
2002.10.17
таймер