Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 17.09.2014, 20:40   #1
Janger
Форумчанин
 
Регистрация: 28.09.2011
Адрес: Москва
Сообщений: 250
Репутация: -1

icq: 445997544
Вопрос Отменить или задержать выключение ПК

у меня не получается отменить выключение Windows.
Я нашёл код:
Код:

procedure TForm1.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
if MessageDlg('Выключить Windows?',mtConfirmation,[mbYes,mbNo], 0) = mrNo then
begin
  Msg.Result := 0;
  sleep(5000);
end
else
begin
  Msg.Result := 1;
  sleep(5000);
end;
end;

Но к сожалению Msg.Result := 0; не приносит желаемого результата.
В интернете очень мало информации на эту тему....
--
Идея у меня в том, что бы задержать выключение Windows хотя бы на 1 минуту. Примерно...
Но в любом случае программа сама потом выключит ПК
Janger вне форума   Ответить с цитированием
Старый 17.09.2014, 22:23   #2
Человек_Борща
Модератор
Заслуженный модератор
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Адрес: Республика Беларусь, г. Минск
Сообщений: 11,452
Репутация: 2688
По умолчанию

Заменить Msg.Msg что-то там на WM_NULL и послать дальше по цепочке.
Человек_Борща вне форума   Ответить с цитированием
Старый 18.09.2014, 02:06   #3
northener
Профессионал
 
Регистрация: 15.07.2013
Сообщений: 1,427
Репутация: 462
По умолчанию

Цитата:
Сообщение от Janger Посмотреть сообщение
Идея у меня в том, что бы задержать выключение Windows хотя бы на 1 минуту. Примерно...
Но в любом случае программа сама потом выключит ПК
Зачем?
Процесс "выключения Windows" достаточно хорошо оптимизирован под среднего пользователя.
northener вне форума   Ответить с цитированием
Старый 18.09.2014, 02:29   #4
Человек_Борща
Модератор
Заслуженный модератор
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Адрес: Республика Беларусь, г. Минск
Сообщений: 11,452
Репутация: 2688
По умолчанию

Цитата:
Идея у меня в том, что бы задержать выключение Windows хотя бы на 1 минуту. Примерно...
этим облом. Выключением можно прервать, прервав цепочку сообщений. Чтобы не пошло само ENDSESSION.
Человек_Борща вне форума   Ответить с цитированием
Старый 18.09.2014, 02:53   #5
northener
Профессионал
 
Регистрация: 15.07.2013
Сообщений: 1,427
Репутация: 462
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Выключением можно прервать, прервав цепочку сообщений. Чтобы не пошло само ENDSESSION.
Прервать выключение в Винде 7 это сродни остановить Савранского.
northener вне форума   Ответить с цитированием
Старый 18.09.2014, 08:09   #6
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,957
Репутация: 6832
По умолчанию

Цитата:
Прервать выключение в Винде 7 это сродни остановить Савранского.
Есть некоторые случаи когда это необходимо. Например для СУБД это критично может быть. Сессии не закрыты, транзакции не проведены, или deadlock какой, и нужно правильно завершить работу СУБД, иначе в следующий раз она может не запуститься. Поэтому нельзя давать выключать пока пользователь не завершит корректно работу программы.
Возможно у автора такая же критическая программа.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 18.09.2014, 09:59   #7
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 21,006
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

Цитата:
In Windows Vista, if your application must block shutdown, in addition to returning FALSE or not responding to WM_QUERYENDSESSION, it should leverage this new UI by using a simple API to provide Windows with a reason string explaining why it is blocking shutdown. This API is straightforward:

BOOL ShutdownBlockReasonCreate(HWND hWnd, LPCWSTR pwszReason);

BOOL ShutdownBlockReasonDestroy(HWND hWnd);

BOOL ShutdownBlockReasonQuery(HWND hWnd, LPWSTR pwszBuff, DWORD *pcchBuff);

Use of this API is detailed more fully later in this topic, as well as in the MSDN documentation for the individual ShutdownBlockReason() functions.

Again, note that this API does not replace the need to return FALSE (or delay responding) to WM_QUERYENDSESSION to block shutdown. Applications need to do this in addition to using the API. Applications that return TRUE to WM_QUERYENDSESSION will be closed at shutdown, regardless of whether they have used the API.
Советую почитать
Цитата:
Выключением можно прервать, прервав цепочку сообщений. Чтобы не пошло само ENDSESSION.
WM_QUERYENDSESSION прерывать не нужно.(да и нет смысла)
а в WM_ENDSESSION можно уже ждать.

в ХР просто не отвечаем на WM_ENDSESSION столько сколько нужно.
в VIsta и выше нужно применить функции процитированные выше.
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отменить действие кнопки else m1zantrop Общие вопросы Delphi 33 11.06.2012 10:57
спонтанное выключение компьютера. или вообще не запускается. divwond Железо 7 13.04.2011 21:56
Отменить сортировку в NextGrid George2010 Компоненты Delphi 3 09.01.2011 17:34
Как отменить поток RIO Общие вопросы Delphi 11 12.10.2009 00:29
Как отменить процедуру? KoBRaAndrey Общие вопросы Delphi 5 05.10.2009 11:12


17:46.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru