SendNotifyMessage with Windows Service
От: Humpbacker  
Дата: 14.03.07 15:18
Оценка:
Ситуация такова.
Есть сервис, написанный на VB.NET.
Сервис управляет опросом различных устройств.
Очень хорошо управляется и контролируется WindowsApplication при помощи объекта ServiceController, однако...
При помощи ServiceController.ExecuteCommand можно запустить опрос устройства, а вот получить сообщения контролирующие ход опроса невозможно.
Появилась идея использовать SendNotifyMessage для посылки главному окну уведомлений о ходе процесса.
Был написан класс-обертка, регистрирующий в системе несколько WM_APP сообщений из диапазона 0xC000 — 0xFFFF и реализующий отправку этих сообщений при помощи SendNotifyMessage.
Результат — сообщения регистрируются и сервисом и приложением, отправляются, но оконная процедура их не получает.
Изменили SendNotifyMessage на PostMessage — аналогично, даже SendMessage успешно запускается и возвращает не ноль!
Само приложение успешно рассылает эти сообщения и получает и другие приложения получают, если использовать HWND_BROADCAST сообщения получают все окна.

Подскажите, пожалуйста, в чем дело?
Re: SendNotifyMessage with Windows Service
От: Danchik Украина  
Дата: 14.03.07 15:33
Оценка:
Здравствуйте, Humpbacker, Вы писали:

[Skip]

H>Подскажите, пожалуйста, в чем дело?


SendMessage работает только если два приложения принадлежат одному и тому же декстопу, поверьте сервис в другом . Тучу раз об этом говорилось.
Можете создать глобальное событие и пульсать его, а програма пускай за ним следит. Также есть еще куча способов обмена сообщениями: named pipes, tcp/ip & etc.
Re[2]: SendNotifyMessage with Windows Service
От: Humpbacker  
Дата: 14.03.07 18:49
Оценка:
Здравствуйте, Danchik, Вы писали:

SendMessage работает только если два приложения принадлежат одному и тому же декстопу

Спасибо за разъяснение. Я так понял это нечто похожее на Unix — можно иметь несколько консолей, работающих в своем изолированном адресном пространстве и имеющих свои очереди сообщений. И в ХР это уже более заметно, т.к. можно сменить пользователя. Еще раз спасибо.

D>Здравствуйте, Humpbacker, Вы писали:


D>[Skip]


H>>Подскажите, пожалуйста, в чем дело?


D>SendMessage работает только если два приложения принадлежат одному и тому же декстопу, поверьте сервис в другом . Тучу раз об этом говорилось.

D>Можете создать глобальное событие и пульсать его, а програма пускай за ним следит. Также есть еще куча способов обмена сообщениями: named pipes, tcp/ip & etc.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.