Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
pa_han87
Зарегистрирован: 14.04.2006 Сообщения: 19
|
Добавлено: Чт Июн 12 2008 16:31 Заголовок сообщения: Как отменить переход системы в спящий режим? |
|
|
При переходе в спящий режим может возникать событие PBT_APMQUERYSUSPEND, когда система запрашивает от работающиюх приложений разрешение на переход в спящий режим. В MSDN написано, что возвращая BROADCAST_QUERY_DENY, можно предотвратить переход в спящий режим. Я пишу:
Код: |
DWORD __fastcall TMainForm::OnPowerBroadcast(TMessage& Message){
static bool DenySuspend=false;
switch (Message.WParam){
...
case PBT_APMQUERYSUSPEND: MessageBeep(MB_ICONQUESTION);
if (Application->MessageBox("Перейти в спящий режим?", Caption, MB_YESNO + MB_ICONQUESTION)==IDYES){
//Здесь завершение работы приложения
}
else
DenySuspend=true;
break;
...
}
if (DenySuspend) return BROADCAST_QUERY_DENY;
}
|
Если я выбираю в диалоге "No", система все равно уходит в спящий режим.
Кто-нибудь работал с этим? Можете подсказать, ошибка у меня в коде или в том, как я пытаюсь его отладить (через Пуск->Завершение работы->StandBy; в MSDN про событие PBT_APMQUERYSUSPEND написано, что у него есть параметр, определяющий, может ли приложение спрашивать юзера о необходимых действиях или система полюбому уйдет в спящий режим - я еще не проверял, во что его выставляет Винда)? |
|
Вернуться к началу |
|
|
NetFantom
Зарегистрирован: 27.01.2004 Сообщения: 41 Откуда: Санкт-Петербург
|
Добавлено: Пт Июн 13 2008 04:19 Заголовок сообщения: |
|
|
А брекпоинт устанавливать пробовал? В эту функцию приходит вообще при попытке переходя в спящий режим? |
|
Вернуться к началу |
|
|
pa_han87
Зарегистрирован: 14.04.2006 Сообщения: 19
|
Добавлено: Сб Июн 14 2008 16:06 Заголовок сообщения: |
|
|
Входит, входит... на остальные сообщения-то реагирует.
Вообще, я уже сам разобрался: никакого return`а не надо, в VCL если в ответ на message надо возвращать значение, оно помещается прямо в поле Result структуры TMessage. В общем, если кому пригодиться, правильно так:
Код: |
void __fastcall TMainForm::OnPowerBroadcast(TMessage& Message){
switch (Message.WParam){
...
case PBT_APMQUERYSUSPEND: MessageBeep(MB_ICONQUESTION);
if (Application->MessageBox("Перейти в спящий режим?", Caption, MB_YESNO + MB_ICONQUESTION)==IDYES){
//Здесь завершение работы приложения
Message.Result=TRUE;
}
else
Message.Result=BROADCAST_QUERY_DENY;
break;
...
}
}
|
+ Таймер, корректно завершающий прогу, даже если юзер MessageBox не увидит. |
|
Вернуться к началу |
|
|
NetFantom
Зарегистрирован: 27.01.2004 Сообщения: 41 Откуда: Санкт-Петербург
|
Добавлено: Пн Июн 16 2008 15:54 Заголовок сообщения: |
|
|
Вот и меня return в функции обработки события смутил |
|
Вернуться к началу |
|
|
|