Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странно но факт, Из за приложения не вырубается винда... 
:(
    Опции темы
simsmann
Дата 17.2.2008, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 26.11.2006

Репутация: нет
Всего: нет



Вопрос поставлен давно, но до сих пор на него нет ответа!!!
Этот вопрос ставился на многих форумах, есть статьи но ничего не дает результата!!!
Вот некоторые ссылки

http://valler.narod.ru/master/ShutDown.html
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=57161
http://delphiworld.narod.ru/_app_.html
Как правило трудности у тех программ которые помещают икону в систем трей.
Обработка WMQueryEndSession и WMEndSession ничего не дает, если даже программа на выходе ничего не сохраняет, все равно программа выгружается если обработать WMQueryEndSession и WMEndSession, а винда затормозилась и продолжает работать какбудто команды на выключение не было.

Кто решил данную проблема ОТКЛИКНИТЕСЬ!!!
PM MAIL   Вверх
simsmann
Дата 17.2.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 26.11.2006

Репутация: нет
Всего: нет



Заметил следующее после обработки WMQueryEndSession, 
WMEndSession не обрабатывается по какой то причине винда не шлет сообщение.
Т.е. после WMQueryEndSession выключение прекращается.

Это сообщение отредактировал(а) simsmann - 17.2.2008, 20:08
PM MAIL   Вверх
bems
Дата 18.2.2008, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



попробуй обрабытывать эти сообщения в Application.OnMessage


--------------------
Обижено школьников: 8
PM MAIL   Вверх
simsmann
Дата 18.2.2008, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 26.11.2006

Репутация: нет
Всего: нет



Слава БОГУ! и Винграду!
Нарыл идею!
Проблема в SC_MINIMIZE при работе с иконой в систем трей.
Замечено, что при обработке WMQueryEndSession хотя программа и выгружается и посылает Винде TRUE или результат <>0 WMEndSession не вызывается и причиной того скорее всего, что программа висит в процессах, и сообщение TRUE от окна ничего недает. Далее выяснилось, что нельзя завершать работу программы CLOSE или Application.Terminate по всей видимости потому, что Винда не получит сообщение именно о завершении процесса от окна получила, а от процесса нет, поэтому Винда и не выгружается. Проблема решается следующим образом использовать для завершения своей программы в WMQueryEndSession - ExitProcess(0);.
Вот держите!!! Опробовано почти во всех ОС, все работает!!!

Код

unit ...

type
...
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

  private
    { Private declarations }
    procedure WMQueryEndSession(var Msg: TWMQueryEndSession); message WM_QUERYENDSESSION;

  public
    { Public declarations }
  end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
{ЗДЕСЬ ВЫ ОБРАБАТЫВАЕТЕ ЧТО ВАМ НУЖНО СДЕЛАТЬ ПЕРЕД ЗАКРЫТИЕМ ПРОГРАММЫ
так же можете обработать и в DESTROY}
end;

procedure TForm1.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
    inherited;
    ExitProcess(0);
    Msg.Result := 1;
end;




Модераторы можно закрыть данный вопрос и не мешалобы поместить это в DRBK , чтоб ребята не мучались.
PM MAIL   Вверх
MetalFan
Дата 18.2.2008, 23:18 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



simsmann, бред полнейший. зачем рубить процесс exitprocess'ом? смысл вызывать inherited и выставлять Msg.Result := 1.
в пустой тестовой программе прекрасно происходит обработка этих сообщений.
проблему заметил в многопоточном приложении...
выход нашел такой: при получении WM_QUERYENDSESSION завершаю потоки и вырубаю приложение.
винда прекрасно выключается
вывод: проблема в вашей программе...


Это сообщение отредактировал(а) MetalFan - 18.2.2008, 23:23


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
MetalFan
Дата 15.3.2008, 22:00 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Внимание! Народ!
Боролся тут с этой проблемой: прога не давала выключиться винде. все процессы завершались, она одна оставалась висеть.
прога сложная, много сторонних компонент, многопоточная... но дело оказалось не в этом.
камень вот в чем:
используется в программе функция AllocateHWND. кто не знает - она позволяет создать "пустое" окно для получения сообщений, и назначает в обработчик сообщений окна переданную процедуру TWndMethod.
так вот, если в назначенном обработчике сообщений не сделать обработку сообщения WM_QUERYENDSESSION, и в Result не возвращать 1, то программа не будет корректно завершаться и давать выключится ОС.
вот такие дела.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.