Ситуация такова.
Есть сервис, написанный на VB.NET.
Сервис управляет опросом различных устройств.
Очень хорошо управляется и контролируется WindowsApplication при помощи объекта ServiceController, однако...
При помощи ServiceController.ExecuteCommand можно запустить опрос устройства, а вот получить сообщения контролирующие ход опроса невозможно.
Появилась идея использовать SendNotifyMessage для посылки главному окну уведомлений о ходе процесса.
Был написан класс-обертка, регистрирующий в системе несколько WM_APP сообщений из диапазона 0xC000 — 0xFFFF и реализующий отправку этих сообщений при помощи SendNotifyMessage.
Результат — сообщения регистрируются и сервисом и приложением, отправляются, но оконная процедура их не получает.
Изменили SendNotifyMessage на PostMessage — аналогично, даже SendMessage успешно запускается и возвращает не ноль!
Само приложение успешно рассылает эти сообщения и получает и другие приложения получают, если использовать HWND_BROADCAST сообщения получают все окна.
Подскажите, пожалуйста, в чем дело?
Здравствуйте, Humpbacker, Вы писали:
[Skip]
H>Подскажите, пожалуйста, в чем дело?
SendMessage работает только если два приложения принадлежат одному и тому же декстопу, поверьте сервис в другом

. Тучу раз об этом говорилось.
Можете создать глобальное событие и пульсать его, а програма пускай за ним следит. Также есть еще куча способов обмена сообщениями: named pipes, tcp/ip & etc.
Здравствуйте, Danchik, Вы писали:
SendMessage работает только если два приложения принадлежат одному и тому же декстопу
Спасибо за разъяснение. Я так понял это нечто похожее на Unix — можно иметь несколько консолей, работающих в своем изолированном адресном пространстве и имеющих свои очереди сообщений. И в ХР это уже более заметно, т.к. можно сменить пользователя. Еще раз спасибо.
D>Здравствуйте, Humpbacker, Вы писали:
D>[Skip]
H>>Подскажите, пожалуйста, в чем дело?
D>SendMessage работает только если два приложения принадлежат одному и тому же декстопу, поверьте сервис в другом
. Тучу раз об этом говорилось.
D>Можете создать глобальное событие и пульсать его, а програма пускай за ним следит. Также есть еще куча способов обмена сообщениями: named pipes, tcp/ip & etc.