![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| simsmann |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 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, а винда затормозилась и продолжает работать какбудто команды на выключение не было. Кто решил данную проблема ОТКЛИКНИТЕСЬ!!! |
|||
|
||||
| simsmann |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 26.11.2006 Репутация: нет Всего: нет |
Заметил следующее после обработки WMQueryEndSession,
WMEndSession не обрабатывается по какой то причине винда не шлет сообщение. Т.е. после WMQueryEndSession выключение прекращается. Это сообщение отредактировал(а) simsmann - 17.2.2008, 20:08 |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
попробуй обрабытывать эти сообщения в Application.OnMessage
-------------------- Обижено школьников: 8 |
|||
|
||||
| simsmann |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 75 Регистрация: 26.11.2006 Репутация: нет Всего: нет |
Слава БОГУ! и Винграду!
Нарыл идею! Проблема в SC_MINIMIZE при работе с иконой в систем трей. Замечено, что при обработке WMQueryEndSession хотя программа и выгружается и посылает Винде TRUE или результат <>0 WMEndSession не вызывается и причиной того скорее всего, что программа висит в процессах, и сообщение TRUE от окна ничего недает. Далее выяснилось, что нельзя завершать работу программы CLOSE или Application.Terminate по всей видимости потому, что Винда не получит сообщение именно о завершении процесса от окна получила, а от процесса нет, поэтому Винда и не выгружается. Проблема решается следующим образом использовать для завершения своей программы в WMQueryEndSession - ExitProcess(0);. Вот держите!!! Опробовано почти во всех ОС, все работает!!!
Модераторы можно закрыть данный вопрос и не мешалобы поместить это в DRBK , чтоб ребята не мучались. |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 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... |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
Внимание! Народ!
Боролся тут с этой проблемой: прога не давала выключиться винде. все процессы завершались, она одна оставалась висеть. прога сложная, много сторонних компонент, многопоточная... но дело оказалось не в этом. камень вот в чем: используется в программе функция AllocateHWND. кто не знает - она позволяет создать "пустое" окно для получения сообщений, и назначает в обработчик сообщений окна переданную процедуру TWndMethod. так вот, если в назначенном обработчике сообщений не сделать обработку сообщения WM_QUERYENDSESSION, и в Result не возвращать 1, то программа не будет корректно завершаться и давать выключится ОС. вот такие дела. -------------------- There are always someone smarter than you... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |