-
Возможно ли службе отправить сообщение содержащее структуру данных или только ControlService с параметром из диаппазона 128...255?
-
> отправить сообщение содержащее структуру данных
Возможно.
Если это нужно сделать средствами оконных сообщений, каковым является WM_CopyData, нужно обеспечть минимум следующее:
1. Служба должна быть стартована с опцией взаимодействия с рабочим столом.
2. Служба должна создать окно и обрабатывать сообщения, адресованные этому окну.
-
а сама служба может отсылать оконные сообщения без проблем, т.е. SendMessage изветсному окну?
-
> сама служба может отсылать оконные сообщения без проблем, > т.е. SendMessage изветсному окну?
Может.
"Без проблем" ознает лишь что окно-приемник существует и десктоп, которому оно принадлежит, соответствует текущему десктопу треда, обслуживающему очередь сообщений этого окна.
-
Сергей, что занчит "... и десктоп, которому оно принадлежит, соответствует текущему десктопу треда, обслуживающему очередь сообщений этого окна."? Форма, которая должна получит сообщение открыта, свой Handle передает через параметр в реестре службе, служба шлет на этот Handle сообщение, но форма его не получает. Сама себе форма отправляет и успешно получает это сообщение... Службе даже разрешил взаимодействие с рабочим столом, он и это не помогло. Что я мог еще упустить?
-
> что занчит "... и десктоп, которому оно принадлежит, соответствует > текущему десктопу треда, обслуживающему очередь сообщений > этого окна."?
В дан.случае это не актуально, у тебя простейший случай.
> свой Handle передает через параметр в реестре службе
Тут ты сморозил. Хэндл - штука, которая не выдается системой в вечное пользование. Стоит тебе пересоздать форму - и ее хэндл запросто будет совсем иным, ибо пересоздание формы ведет к пересозданию окна. А в реестр ты записал прежнее значение хендла, полагая что оно неизменно. Сервис же твой, взяв при старте значение хендла из реестра, полагает, что это есть хендл действительно существующего окна действительно существующей формы, хотя это уже не будет соответствовать действительности с момента уничтожения формы, чей хендл был записан в реестр.
-
> d@vinchi © (18.09.09 15:35) [4]
Вообще говоря, выбор механизма оконных сообщений для коммнуникаций со службами с целью приема/передачи инф.сообщений произвольного нефиксированного размера - не самый лучший, не самый удобный и не единственно возможный.
-
Хенд окна я пишу в реестр каждый раз при открытии окна из обработчика OnShow, таким образом я обеспечиваю актуальный хенд в реестре...
Межпроцессное взаиможействие на события я использую временно для отладки, в итоге наиболее правильными решением будет обмен по TCP\IP, но это уже следующий этап развития проги, пока так...
-
> [7] d@vinchi © (18.09.09 17:57)
знаешь толк в извращениях ) используй именованные каналы (Named Pipes) - это проще, понятнее и удобнее.
-
> Хенд окна я пишу в реестр каждый раз при открытии окна из > обработчика OnShow
И тут же, в OnShow, стартуешь свою службу ? В какой момент твоя служба обращается к реестру за этим самым хендлом ? Только не говори, что она N раз в секунду по таймеру читает из реестра это значение, чтобы "быть в курсе самого свежего хендла")
-
to [9]
> И тут же, в OnShow, стартуешь свою службу ?
Зачем же... служба живет сама по себе, это отдельное приложение. Приложение для ее мониторинга и управления отдельная прога от службы и из OnShow оно службу не пускает. Задумка была такая: когда службе надо уведомить прогу мониторинга о чем-либо она приверяет хенд в реестре, если он отличен от нуля, то SendMessage, если в ответ от SendMessage получаем False то пишем в реестр нуль - т.е. хенд не актуален, т.к. окно соответствующее этому хендлу не обработало сообщение... Сейчас уже делаю обмен по TCP\IP, просто интересно разобраться почему же так не сработало?
to [8] а есть информация как работать с именованными каналами, пока только о них слышал из далека...
-
> почему же так не сработало?
Потому что нет ничего глупее передавать через реестр хендлы ОС-объектов. > как работать с именованными каналами
Можно, например, поэкспериментировать с этим http://r3code.livejournal.com/117012.html
-
Спасибо!
-
> Потому что нет ничего глупее передавать через реестр хендлы > ОС-объектов
Сергей, полностью с Вами согласен, но ничего другого на скорую руку не придумал...
-
> на скорую руку
А что за спешка ?)
-
просто хочу побыстрее проект закончить...
-
> хочу побыстрее проект закончить
Чем побыстрее закончишь - тем порашьше придется к нему вернуться)
|