завершить себя при завершении windows
От: vlaman Украина  
Дата: 13.08.04 08:11
Оценка:
Есть процесс который висит в фоне и периодически выполняет какиенибудь действия. Процесс не имеет окон. Внутри всё организовано так:

while ( flag )
{
Sleep(1000);
if ( action_needed )
{
...делаем дело...
}
}

Каким образом я могу узнать что мне необходимо завершатся (пользователь нажал завершение работы)?
В данном случае оно всё таки завершается — но на экран выскакивает сообщение что процесс необходимо завершить или подождать — хотелось бы чтобы такого не было.

Подскажите плиз, заранее благодарен!
Re: завершить себя при завершенииwindows
От: Pavel Dvorkin Россия  
Дата: 13.08.04 08:16
Оценка:
Привет!

vlaman wrote:
>
> Есть процесс который висит в фоне и периодически выполняет какиенибудь действия. Процесс не имеет окон. Внутри всё организовано так:
>
> while ( flag )
> {
> Sleep(1000);
> if ( action_needed )
> {
> ...делаем дело...
> }
> }
>
> Каким образом я могу узнать что мне необходимо завершатся (пользователь нажал завершение работы)?
> В данном случае оно всё таки завершается — но на экран выскакивает сообщение что процесс необходимо завершить или подождать — хотелось бы чтобы такого не было.

WM_ENDSESSION


--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[2]: завершить себя при завершенииwindows
От: vlaman Украина  
Дата: 13.08.04 08:19
Оценка:
Ну окна то у меня нет, как я буду ловить сообщение?

Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Привет!


PD>vlaman wrote:

>>
>> Есть процесс который висит в фоне и периодически выполняет какиенибудь действия. Процесс не имеет окон. Внутри всё организовано так:
>>
>> while ( flag )
>> {
>> Sleep(1000);
>> if ( action_needed )
>> {
>> ...делаем дело...
>> }
>> }
>>
>> Каким образом я могу узнать что мне необходимо завершатся (пользователь нажал завершение работы)?
>> В данном случае оно всё таки завершается — но на экран выскакивает сообщение что процесс необходимо завершить или подождать — хотелось бы чтобы такого не было.

PD>WM_ENDSESSION



PD>--

PD>With best regards,
PD> Pavel Dvorkin
Re[3]: завершить себя при завершенииwindows
От: Pavel Dvorkin Россия  
Дата: 13.08.04 08:20
Оценка:
Привет!

vlaman wrote:
>
> Ну окна то у меня нет, как я буду ловить сообщение?

Сделай невидимое.
--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[2]: завершить себя при завершенииwindows
От: Andrew S Россия http://alchemy-lab.com
Дата: 13.08.04 08:20
Оценка:
>> Есть процесс который висит в фоне и периодически выполняет какиенибудь действия. Процесс не имеет окон. Внутри всё организовано так:
>>
>> while ( flag )
>> {
>> Sleep(1000);
>> if ( action_needed )
>> {
>> ...делаем дело...
>> }
>> }
>>
>> Каким образом я могу узнать что мне необходимо завершатся (пользователь нажал завершение работы)?
>> В данном случае оно всё таки завершается — но на экран выскакивает сообщение что процесс необходимо завершить или подождать — хотелось бы чтобы такого не было.

PD>WM_ENDSESSION


См. выделенное.

Решение — SetConsoleCtrlHandler.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: завершить себя при завершенииwindows
От: vlaman Украина  
Дата: 13.08.04 08:22
Оценка:
Ok, thanks!
Но есть ли способ сделать это без окна?
В unix я просто получаю сигнал от системы, и по нему завершаю процесс.
Как такое реализовать в win32? Возможно ли это вообще?

Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Привет!


PD>vlaman wrote:

>>
>> Ну окна то у меня нет, как я буду ловить сообщение?

PD>Сделай невидимое.

PD>--
PD>With best regards,
PD> Pavel Dvorkin
Re[3]: завершить себя при завершенииwindows
От: Pavel Dvorkin Россия  
Дата: 13.08.04 08:25
Оценка:
Привет!

Andrew S wrote:

> Решение — SetConsoleCtrlHandler.


Так ты отловишь logoff, а не shutdown. Впрочем, это в данном случае все
равно.

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[3]: завершить себя при завершенииwindows
От: vlaman Украина  
Дата: 13.08.04 08:28
Оценка:
Здравствуйте, Andrew S, Вы писали:

>>> Есть процесс который висит в фоне и периодически выполняет какиенибудь действия. Процесс не имеет окон. Внутри всё организовано так:

>>>
>>> while ( flag )
>>> {
>>> Sleep(1000);
>>> if ( action_needed )
>>> {
>>> ...делаем дело...
>>> }
>>> }
>>>
>>> Каким образом я могу узнать что мне необходимо завершатся (пользователь нажал завершение работы)?
>>> В данном случае оно всё таки завершается — но на экран выскакивает сообщение что процесс необходимо завершить или подождать — хотелось бы чтобы такого не было.
PD>>WM_ENDSESSION
AS>См. выделенное.
AS>Решение — SetConsoleCtrlHandler.

похоже то что надо!
если программа не консольная — работать это будет?
Re[5]: завершить себя при завершенииwindows
От: Pavel Dvorkin Россия  
Дата: 13.08.04 08:28
Оценка:
Привет!

vlaman wrote:
>
> Ok, thanks!
> Но есть ли способ сделать это без окна?
> В unix я просто получаю сигнал от системы, и по нему завершаю процесс.
> Как такое реализовать в win32? Возможно ли это вообще?

Одно решение тебе предложил Andrew S.
Еще одно — см. Winlogon Notification Packages в MSDN. Это намного
сложнее.


--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[4]: завершить себя при завершенииwindows
От: Pavel Dvorkin Россия  
Дата: 13.08.04 08:29
Оценка:
Привет!

vlaman wrote:
> похоже то что надо!
> если программа не консольная — работать это будет?

Не будет.

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[4]: завершить себя при завершенииwindows
От: Andrew S Россия http://alchemy-lab.com
Дата: 13.08.04 08:30
Оценка:
>> Решение — SetConsoleCtrlHandler.

PD>Так ты отловишь logoff, а не shutdown. Впрочем, это в данном случае все

PD>равно.

А в MSDN заглянуть?


CTRL_LOGOFF_EVENT A signal that the system sends to all console processes when a user is logging off. This signal does not indicate which user is logging off, so no assumptions can be made.
CTRL_SHUTDOWN_EVENT A signal that the system sends to all console processes when the system is shutting down.
Note that this signal is received only by services. Interactive applications are terminated at logoff, so they are not present when the system sends this signal. Services also have their own notification mechanism for shutdown events. For more information, see Handler.

http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[5]: завершить себя при завершенииwindows
От: vlaman Украина  
Дата: 13.08.04 08:31
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Привет!


PD>vlaman wrote:

>> похоже то что надо!
>> если программа не консольная — работать это будет?

PD>Не будет.


как тогда быть? получается что кроме как создавать окно и ловить им сообщение, других
способов решения в win32 нет?
Re[5]: завершить себя при завершенииwindows
От: Pavel Dvorkin Россия  
Дата: 13.08.04 08:31
Оценка:
Привет!

Andrew S wrote:
>
> >> Решение — SetConsoleCtrlHandler.
>
> PD>Так ты отловишь logoff, а не shutdown. Впрочем, это в данном случае все
> PD>равно.
>
> А в MSDN заглянуть?

А если внимательно прочитать, то, что ты процитировал ? Я подчеркнул.


>

>

> CTRL_LOGOFF_EVENT A signal that the system sends to all console processes when a user is logging off. This signal does not indicate which user is logging off, so no assumptions can be made.
> CTRL_SHUTDOWN_EVENT A signal that the system sends to all console processes when the system is shutting down.
> ____Note that this signal is received only by services____. Interactive applications are terminated at logoff, so they are not present when the system sends this signal. Services also have their own notification mechanism for shutdown events. For more information, see Handler.


--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[6]: завершить себя при завершенииwindows
От: Pavel Dvorkin Россия  
Дата: 13.08.04 08:33
Оценка:
Привет!

vlaman wrote:

> как тогда быть? получается что кроме как создавать окно и ловить им сообщение, других

> способов решения в win32 нет?

Я же тебе писал про Winlogon Notification Packages. Хочешь с ними
мучаться — пожалуйста. Всего то и делов — написать DLL и
зарегистрировать в реестре

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[4]: завершить себя при завершенииwindows
От: dv2004  
Дата: 13.08.04 08:35
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Привет!


PD>Andrew S wrote:


>> Решение — SetConsoleCtrlHandler.


PD>Так ты отловишь logoff, а не shutdown. Впрочем, это в данном случае все

PD>равно.

А что если сервис сделать — там все события есть.
а если не сервис — так захукать можно.

PD>--

PD>With best regards,
PD> Pavel Dvorkin
... << RSDN@Home 1.1.3 stable >>
Re[4]: завершить себя при завершенииwindows
От: Andrew S Россия http://alchemy-lab.com
Дата: 13.08.04 08:36
Оценка:
>>>> Есть процесс который висит в фоне и периодически выполняет какиенибудь действия. Процесс не имеет окон. Внутри всё организовано так:
>>>>
>>>> while ( flag )
>>>> {
>>>> Sleep(1000);
>>>> if ( action_needed )
>>>> {
>>>> ...делаем дело...
>>>> }
>>>> }
>>>>
>>>> Каким образом я могу узнать что мне необходимо завершатся (пользователь нажал завершение работы)?
>>>> В данном случае оно всё таки завершается — но на экран выскакивает сообщение что процесс необходимо завершить или подождать — хотелось бы чтобы такого не было.
PD>>>WM_ENDSESSION
AS>>См. выделенное.
AS>>Решение — SetConsoleCtrlHandler.

V>похоже то что надо!

V>если программа не консольная — работать это будет?

Не будет. Т.о. у вас варианты на выбор — либо создавать консоль, либо скрытое окно
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[7]: завершить себя при завершенииwindows
От: vlaman Украина  
Дата: 13.08.04 08:37
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Привет!


PD>vlaman wrote:


>> как тогда быть? получается что кроме как создавать окно и ловить им сообщение, других

>> способов решения в win32 нет?

PD>Я же тебе писал про Winlogon Notification Packages. Хочешь с ними

PD>мучаться — пожалуйста. Всего то и делов — написать DLL и
PD>зарегистрировать в реестре

ясно. спасибо большое за помощь!!!
Re[5]: завершить себя при завершенииwindows
От: Pavel Dvorkin Россия  
Дата: 13.08.04 08:38
Оценка:
Привет!

dv2004 wrote:
>
> Здравствуйте, Pavel Dvorkin, Вы писали:
>
> А что если сервис сделать — там все события есть.

Судя по тексту программы автора — там сервисом и не пахнет. Нужен ли ему
сервис — вопрос не ко мне.

> а если не сервис — так захукать можно.


Зачем так сложно ? Проще окно невидимое создать и WM_ENDSESSION ловить.
10 минут работы.

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Re[6]: завершить себя при завершенииwindows
От: Andrew S Россия http://alchemy-lab.com
Дата: 13.08.04 08:39
Оценка:
PD>А если внимательно прочитать, то, что ты процитировал ? Я подчеркнул.

Но мы же не знаем, что у него — сервис или нет Если даже консоли нет — очень похоже на сервис.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[7]: завершить себя при завершенииwindows
От: Pavel Dvorkin Россия  
Дата: 13.08.04 08:42
Оценка:
Привет!

Andrew S wrote:
>
> PD>А если внимательно прочитать, то, что ты процитировал ? Я подчеркнул.
>
> Но мы же не знаем, что у него — сервис или нет Если даже консоли нет — очень похоже на сервис.

Знаем

См. первое письмо

>Есть процесс который висит в фоне и периодически выполняет какиенибудь действия. Процесс не

>имеет окон. Внутри всё организовано так:

while ( flag )
{
Sleep(1000);
if ( action_needed )
{
...делаем дело...
}
}

Так сервисы не пишут

--
With best regards,
Pavel Dvorkin
Posted via RSDN NNTP Server 1.7 "Bedlam"
With best regards
Pavel Dvorkin
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.