Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Отловить событие закрытие программы


Автор: eldar22 27.5.2009, 16:55
Так вот когда запускаешь программу,  а потом её закрываешь не кнопкой, а диспетчером задач
Вот как такое событие отловить?

Автор: Rrader 27.5.2009, 18:01
Из сторонней программы\драйвера.

Автор: eldar22 27.5.2009, 18:16
Нт наверное меня не поняли вот у меня есть моя программа
Когда я её запустил на 5 минут допустим, а потом я её хочу закрыть через диспетчер задач и если программа  закрылась через диспетчер задач то она посылает post запрос

Автор: amt 27.5.2009, 18:36
Событие Query Unload
Более практичным, чем Unload, является событие QueryUnload.
Наряду с параметром Cancel в процедуру обработки события передается
и параметр UnloadkMode, указывающий причину возникновения
события.
 Параметры OnloadMode в QueryUnload
Константа                  Значение      Причина возникновения события
vbFormControlMenu        0                Пользователь закрыл приложение посредством
                                                          [Alt+F4], кнопки Close (Закрыть) окна или
                                                         одноименной команды системного меню
vbFormCode                    1                В коде выполняется команда Unload
vbAppWindows                2                Завершение сеанса Windows
vbAppTaskManager         3                Выход из приложения с помощью менеджера задач
vbFormMDIForm              4                 Дочерняя форма MDI закрыта, так как закрыта
                                                          вышестоящая форма MDI


Автор: Akina 27.5.2009, 18:42
Однако при "жёсткой" выгрузке приложение вообще никакого сообщения не получит - только пинок коленом под зад... впрочем, под Виндами такую выгрузку сделать не так уж и просто - все штатные или околоштатные средства сначала пытаются решить дело миром, и только если "Приложение не отвечает" - тогда извини...

Автор: Прибой94 27.5.2009, 18:48
Я пользуюсь функцией Form.Unload.
Работало даже при закрытии при помощи Диспетчера.

PS: Делал незакрывающиеся программы smile 

Автор: eldar22 27.5.2009, 19:02
Код

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = vbAppTaskManager Then
Dim strURL As String
Dim strHeader As String

strHeader = "Host: www.сайт.ru" & vbNewLine & _
            "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRSPUTNIK 2, 0, 1, 90 SW; MRA 5.4 (build 02620); .NET CLR 2.0.50727; Dealio Toolbar 3.4; InfoPath.1)" & vbNewLine & _
            "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" & vbNewLine & _
            "Accept-Language: ru,en-us;q=0.7,en;q=0.3" & vbNewLine & _
            "Accept-Encoding: gzip,deflate" & vbNewLine & _
            "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7" & vbNewLine & _
            "Keep-Alive: 300" & vbNewLine & _
             "Referer: http://www.сайт.ru/index2.php" & vbNewLine & _
             "Content-Type: application/x-www-form-urlencoded" & vbNewLine & _
            "Connection: keep-alive" & vbNewLine




strURL = "http://www.сайт.ru/del.php?login=" + login.Text
Inet2.Execute strURL, "GET", strHeader
Cancel = True
End If
End Sub


Ну чё то все равно не отправляет
В чём проблема?

Автор: Akina 27.5.2009, 20:42
Цитата(eldar22 @  27.5.2009,  20:02 Найти цитируемый пост)
все равно не отправляет

ТО есть Вы хотите сказать, что тот же код, но размещённый, скажем, в Button_Click, отправляет?

Автор: eldar22 27.5.2009, 21:11
Нет я хочу сказать когда я закрываю программу с помощью диспетчера задач то программа не отправляет post запрос

Автор: Akina 27.5.2009, 21:27
Ничего не понимаю... а нахрена тогда был приведён код выше?

Автор: eldar22 27.5.2009, 21:45
Код был приведён чтобы разобраться 
Попробую объяснить на пальцах  smile 
1 есть программа
2 запускаешь её
3 жмёшь ctrl+alt+delete
4 ищешь процесс  программы 
5 завершаешь процесс программы
6 программы посылает post запрос
ВсЁ smile 

Автор: Akina 27.5.2009, 22:10
Так. И где твой код, который должен выполнять пускт 6, но не выполняет? тольько не говори, что ты его привёл выше - это заведомо не так.

Автор: eldar22 27.5.2009, 22:18
Akina тогда скажи как сделать то что я хочу ?

Автор: I_Am_Rock 29.5.2009, 11:45
Цитата(Akina @  27.5.2009,  20:42 Найти цитируемый пост)
ТО есть Вы хотите сказать, что тот же код, но размещённый, скажем, в Button_Click, отправляет?


Цитата(eldar22 @  27.5.2009,  21:11 Найти цитируемый пост)
Нет я хочу сказать когда я закрываю программу с помощью диспетчера задач то программа не отправляет post запрос


Мне кажется Akina имеет ввиду, что вам нужно сначала убедиться, что код вообще работает.

Автор: neic 29.5.2009, 11:56
Цитата(Akina @  27.5.2009,  22:10 Найти цитируемый пост)
Так. И где твой код, который должен выполнять пускт 6, но не выполняет? тольько не говори, что ты его привёл выше - это заведомо не так. 

Ну не POST, а GET...чё придераешся? =)

I_Am_Rock
Правильно думаешь =)

Автор: eldar22 29.5.2009, 20:19
Код будет работать когда в диспетчере завершаешь работу программы он не работает когда завершаешь процесс программы

Автор: Kardinalli 13.6.2015, 16:33
Подниму старую тему, с вашего позволения.

Так как все же можно отследить принудительное завершение процесса самой завершаемой программой?

Суть: есть программа (лоадер), которая запускает дочернюю программу. При закрывании дочерней программы, лоадер тоже заканчивает работу. Если закрыть лоадер, так же закрывается дочерняя. Но если процесс лоадера закрыть принудительно, через диспетчер, то дочерняя программа остается работать.
Никакие события (QueryUnload, Unoad, Terminate) при этом не отрабатывают.

Как все же отловить сие?

Автор: Akina 15.6.2015, 00:15
Kardinalli, самое дубовое - наладить между ними обмен сигналами "я ещё живой"...

Автор: Kardinalli 16.6.2015, 18:11
Если бы ОБЕ софтины писал я, то без проблем, взаимный мониторинг и дело в шляпе. Но запускаемая программа - сторонняя, без признаков исходников, к тому же на дельфи. Так что, фиг она будет следить за мамой...  smile 

Автор: Akina 16.6.2015, 18:42
Kardinalli, ну хотя бы одна из них - твоя? если нет - придётся писАть третью. Программу-монитор.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)