![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| tippmann |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 29.3.2004 Где: Ивантеевка Репутация: нет Всего: нет |
Программка с использованием RxTrayIcon. Написана на Дельфи 6. Почти всегда свернута в трей.
Полезная работа: отдельным потоком коннектится по UDP к серверу и периодически опрашивает состояние, которое отображает в StringGrid. Проблема: При завершении работы или перезагрузке в трее остается только иконка этой проги (она продолжает работать), и винда не может завершиться. Причем, если окно проги активно - сама прога завершается, а винда перегружается только при повторном тычке на кнопку "Перезагрузка". Если окно проги свернуто в трей (т.е. видно только иконку) - совсем ничего не происходит (и прога работает, и винда не завершается). Где чего написать чтоб винда нормально завершилась - я уж и не знаю. Все перепробовал, все ФАКи перерыл... Вот все процедуры которые вроде отношение имеют к этому:
Это сообщение отредактировал(а) tippmann - 29.3.2004, 22:05 |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 1 Всего: 64 |
То есть это не твоя программа? Тогда сделай свою и при зафершении работы виды делай FindWindow + TerminateProcess
Это сообщение отредактировал(а) <Spawn> - 30.3.2004, 04:52 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| tippmann |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 29.3.2004 Где: Ивантеевка Репутация: нет Всего: нет |
<Spawn> - это моя программка. Просто я первый раз столкнулся с необходимостью завершить нормально прогу при перезагрузке винды. Вот собственно по этому за советом и пришел.
Еще раз вопрос, может даже поконкретней: Если окно проги развернуто, при попытке перегрузиться прога завершается, а винда нет. Винда нормально завершится при повторном тычке на кнопке Перезагрузка. ИМХО моя программка перед самым завершением своей работы должна уведомить винду сообщением, что она типа закончила работу и можно перезагружаться. Что это за сообщение и когда (куда, кому) его лучше послать? |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 7 Всего: 115 |
А что за Процедура - cleanup ?
|
|||
|
||||
| Maverick |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1307 Регистрация: 22.9.2003 Где: Odessa, Ukraine Репутация: нет Всего: 10 |
Вероятно пользовательская... По аналогии с FoxPro названо - при закрытии окна, там такая штука есть... |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 14 Всего: 112 |
RAdmin, Maverick, да вы что ? CleanUp же расписана в коде !
tippmann, попробуй сделать в конце CleanUp TerminateProcess(GetCurrentProcess); вместо Application.Terminate -------------------- С уважением, г-н Посол. |
|||
|
||||
| tippmann |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 29.3.2004 Где: Ивантеевка Репутация: нет Всего: нет |
p0s0l
Спасибо. При чтении доки по TerminateProcess обнаружил что и Thread я не правильно завершал. НО проблему это НЕ решило... Если окно проги активно - все ОК, срабатывает процедура FormCloseQuery и винда вместе с прогой завершаются. Если прога свернута - ничего не происходит. Все остальные проги завершаются кроме моей... Отсюда я делаю вывод, что проблема заключается в следующем: окно проги прячется функцией ShowWindow(Application.Handle, SW_HIDE); (бо я не хочу чтоб она висела в таскбаре). Т.е. остается только иконка в трее. Если не прятать таким образом окно, а просто сворачивать - все нормально. Куда в таком случае Винда посылает сообщение на закрытие и как поймать это сообщение? ЗЫ: Ведь полно таких прог, у которых только иконка в трее, и все у всех работает. Неужели никто не писал такое никогда? Прога без исходников лежит тут http://baton.itkm.ru/progs.php ~720 Kb Исходники для D6 могу выслать почтой если кого заинтересует. |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 7 Всего: 115 |
А что нельзя просто Form1.visible:=false; ?
|
|||
|
||||
| tippmann |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 29.3.2004 Где: Ивантеевка Репутация: нет Всего: нет |
Нельзя. Я ж ясно написал - не хочу чтоб прога была видна в таскбаре. Хочу чтоб только иконка была в трее. |
|||
|
||||
| z-END |
|
|||
![]() прафесар™ ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3014 Регистрация: 13.3.2003 Где: Венья, Пиетари Репутация: 1 Всего: 102 |
tippmann
попробуй вместо application.terminate делать ExitProccess(0); у меня была похожая проблемма при работе с плагинами так вот ExitProccess очень помог. -------------------- Каждый чилавек пасвоему праф...а памоему НЕТ! |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 7 Всего: 115 |
tippmann э не внимательно тебя прочёл. Слух а программа под 9x чтоли ?
|
|||
|
||||
| tippmann |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 29.3.2004 Где: Ивантеевка Репутация: нет Всего: нет |
RAdmin
Я ее пишу сидя в win 2000, а уж куда ее люди ставить будут - не мое дело... По идее везде работать должно... Я там ничего такого специфичкого не использовал. И с чего можно было взять что она под 9х? |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 7 Всего: 115 |
tippmann да ты про таскбар сказал вот я и подумал что под 9x
|
|||
|
||||
| tippmann |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 29.3.2004 Где: Ивантеевка Репутация: нет Всего: нет |
RAdmin
мдя, всех бывает подглючивает... nJIaKca.spb Спасибо!!! ExitProccess(0); и мне помог. Как раз то что нужно было... Эх, поставил бы тебе плюсик, да мне пока не разрешають Для тех кто будет после меня колупаться: при применении ExitProccess(0); даже если форма скрыта функцией ShowWindow(Application.Handle, SW_HIDE); и отсутствует в списке выполняемых приложений, происходит вызов процедуры FormCloseQuery, где можно сделать завершающие действия, и винда завершится нормально. При использовании TerminateProcess(GetCurrentProcess,0); или application.terminate; этого не происходит. Винда нормально завершиться не может (если окно скрыто). Да и ваабще как я понял использовать ExitProccess(0); предпочтительнее всего, бо он там сам еще кучу полезной работы делает типа отсоединения DLL и завершения Thread... |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 14 Всего: 112 |
tippmann, поставлю плюсик nJIaKca.spb, раз тебе не позволено, а человек заслужил.
-------------------- С уважением, г-н Посол. |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |