![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| THenry |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Суть проблемы в следующем:
Моё приложение имеет несколько форм и висит в трее, главная форма служит как бы контейнером для компонент (иконка в трее, меню для иконки таймера и т.д.) и форма эта невидимая. Выход приложения осуществляется через popup menu и только так. А теперь собственно говоря проблемма: Когда я хочу выключить винду все другие запушенные приложения закрываются, а моё нет и винда как следствие не вырубается Такое событие в дебагере отследить не представляю даже как (тока если из какого нить другого приложения посылать моему WM_CLOSE) но я пошел другим путем и расставил в событии onClose диалоговые сообщения чтоб отследить что выполнятеся а что нет. Получил вывод: Винда либо не шлет WM_CLOSE моему приложению либо оно не доходит. Может кто что подскажет? |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Slayers |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 17.7.2005 Где: Харьков Репутация: нет Всего: 1 |
THenry Был у меня такой прикол . Я тогда в OnCloseQuery писал CanClose := false и это не давало вырубить камп , и тогда я прописал в OnClose Abort(); И всё заработало
Если не поможет то покажи как ты там делаеш !!! |
|||
|
||||
| THenry |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Slayers РАзговор не идет о том что написано в onClose. Я говорю о том что при попытке выключить винду до этого самого onClose дело то и не доходит (Я просто вставил первой сторокой MessageDlg, при выходе в ручную всё нормально т.е. появляется сообщение выполняются все необходимые действия, а когда я нажимаю на кнопочку Power чтоб выключить винду то тишина) Вот об этом я и говорю. Естественно onCloseQuery тоже не выполняется (это на тот случай если будет предложение типа CanClose:=true)
|
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
ну написал же ты, что у тебя есть формы, у формы есть событие OnCloseQuery - оно и ловит это сообщение... и вернуть оно должно CanClose:=true или винда не выключится...
-------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| Poseidon |
|
||||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Для реализации твоей задачи нужно сделать что-то вроде:
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||||
|
|||||||
| THenry |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Только сейчас руки дошли до делфи, сел попробовал то что посоветовал
Poseidon отчасти помогло, но только от части. Теперь приложение завершает свою работу, а винда все равно не выключается |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| THenry |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Ничего не пишет и ничего не происходит. Просто приложение завершает свою работу и всё
|
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| THenry |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
И что значат эти смайлики? Почему не выключается? Ну так вот за этим я и создал тему чтоб разобраться с аномалией по выключению
|
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Ё.....
Что значит "винда все равно не выключается"? Что при этом происходит (с Виндой а не прогой), какие сообщения появляются (Виндовые а не проги). Что вообще творится? -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| THenry |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Объясняю еще раз повторяя свои же цитаты:
Что еще тут добавить? А теперь во избежание вопросов рассказываю процесс: 1. Нажимаю кнопку Power(или через меню пуск, что не важно), жду.. 2. Итог: Все приложения закрываются, никаких сообщений не вылетает ничего нестандартного не происходит(винда продолжает работать) 3. Запускаю "Диспетчер задач" чистейщая винда (как будто только что поставил |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Это у тебя так происходит только тогда, кагда ты запускаешь сваю прогу и потом пытаешься выйтииз Винды или всегда так происходит?
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| THenry |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 13.9.2005 Репутация: нет Всего: нет |
Да, всмысле, только при запущенном моем приложении.
|
|||
|
||||
| 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. |