Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2011.12.25;
Скачать: [xml.tar.bz2];

Вниз

Как отправить службе сообщение WM_CopyData?   Найти похожие ветки 

 
d@vinchi ©   (2009-09-18 10:57) [0]

Возможно ли службе отправить сообщение содержащее структуру данных или только ControlService с параметром из диаппазона 128...255?


 
Сергей М. ©   (2009-09-18 11:20) [1]


> отправить сообщение содержащее структуру данных


Возможно.

Если это нужно сделать средствами оконных сообщений, каковым является WM_CopyData, нужно обеспечть минимум следующее:

1. Служба должна быть стартована с опцией взаимодействия с рабочим столом.

2. Служба должна создать окно и обрабатывать сообщения, адресованные этому окну.


 
d@vinchi ©   (2009-09-18 11:30) [2]

а сама служба может отсылать оконные сообщения без проблем, т.е. SendMessage изветсному окну?


 
Сергей М. ©   (2009-09-18 12:03) [3]


> сама служба может отсылать оконные сообщения без проблем,
>  т.е. SendMessage изветсному окну?


Может.

"Без проблем" ознает лишь что окно-приемник существует и десктоп, которому оно принадлежит, соответствует текущему десктопу треда, обслуживающему очередь сообщений этого окна.


 
d@vinchi ©   (2009-09-18 15:35) [4]

Сергей, что занчит "... и десктоп, которому оно принадлежит, соответствует текущему десктопу треда, обслуживающему очередь сообщений этого окна."?
Форма, которая должна получит сообщение открыта, свой Handle передает через параметр в реестре службе, служба шлет на этот Handle сообщение, но форма его не получает. Сама себе форма отправляет и успешно получает это сообщение... Службе даже разрешил взаимодействие с рабочим столом, он и это не помогло. Что я мог еще упустить?


 
Сергей М. ©   (2009-09-18 16:07) [5]


> что занчит "... и десктоп, которому оно принадлежит, соответствует
> текущему десктопу треда, обслуживающему очередь сообщений
> этого окна."?


В дан.случае это не актуально, у тебя простейший случай.


> свой Handle передает через параметр в реестре службе


Тут ты сморозил.
Хэндл - штука, которая не выдается системой в вечное пользование.
Стоит тебе пересоздать форму - и ее хэндл запросто будет совсем иным, ибо пересоздание формы ведет к пересозданию окна.
А в реестр ты записал прежнее значение хендла, полагая что оно неизменно.
Сервис же твой, взяв при старте значение хендла из реестра, полагает, что это есть хендл действительно существующего окна действительно существующей формы, хотя это уже не будет соответствовать действительности с момента уничтожения формы, чей хендл был записан в реестр.


 
Сергей М. ©   (2009-09-18 16:18) [6]


> d@vinchi ©   (18.09.09 15:35) [4]


Вообще говоря, выбор механизма оконных сообщений для коммнуникаций со службами  с целью приема/передачи инф.сообщений произвольного нефиксированного размера - не самый лучший, не самый удобный и не единственно возможный.


 
d@vinchi ©   (2009-09-18 17:57) [7]

Хенд окна я пишу в реестр каждый раз при открытии окна из обработчика OnShow, таким образом я обеспечиваю актуальный хенд в реестре...

Межпроцессное взаиможействие на события я использую временно для отладки, в итоге наиболее правильными решением будет обмен по TCP\IP, но это уже следующий этап развития проги, пока так...


 
Eraser ©   (2009-09-18 20:23) [8]

> [7] d@vinchi ©   (18.09.09 17:57)

знаешь толк в извращениях )
используй именованные каналы (Named Pipes) - это проще, понятнее и удобнее.


 
Сергей М. ©   (2009-09-18 20:26) [9]


> Хенд окна я пишу в реестр каждый раз при открытии окна из
> обработчика OnShow


И тут же, в OnShow, стартуешь свою службу ?
В какой момент твоя служба обращается к реестру за этим самым хендлом ?
Только не говори, что она N раз в секунду по таймеру читает из реестра это значение, чтобы "быть в курсе самого свежего хендла")


 
d@vinchi ©   (2009-09-21 08:48) [10]

to [9]

> И тут же, в OnShow, стартуешь свою службу ?

Зачем же... служба живет сама по себе, это отдельное приложение. Приложение для ее мониторинга и управления отдельная прога от службы и из OnShow оно службу не пускает. Задумка была такая: когда службе надо уведомить прогу мониторинга о чем-либо она приверяет хенд в реестре, если он отличен от нуля, то SendMessage, если в ответ от SendMessage получаем False то пишем в реестр нуль - т.е. хенд не актуален, т.к. окно соответствующее этому хендлу не обработало сообщение...
Сейчас уже делаю обмен по TCP\IP, просто интересно разобраться почему же так не сработало?

to [8]
а есть информация как работать с именованными каналами, пока только о них слышал из далека...


 
Сергей М. ©   (2009-09-21 10:27) [11]


> почему же так не сработало?


Потому что нет ничего глупее передавать через реестр хендлы ОС-объектов.


> как работать с именованными каналами


Можно, например, поэкспериментировать с этим

http://r3code.livejournal.com/117012.html


 
d@vinchi ©   (2009-09-21 11:06) [12]

Спасибо!


 
d@vinchi ©   (2009-09-21 11:09) [13]


> Потому что нет ничего глупее передавать через реестр хендлы
> ОС-объектов

Сергей, полностью с Вами согласен, но ничего другого на скорую руку не придумал...


 
Сергей М. ©   (2009-09-21 11:12) [14]


> на скорую руку


А что за спешка ?)


 
d@vinchi ©   (2009-09-21 12:43) [15]

просто хочу побыстрее проект закончить...


 
Сергей М. ©   (2009-09-21 13:12) [16]


> хочу побыстрее проект закончить


Чем побыстрее закончишь - тем порашьше придется к нему вернуться)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2011.12.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
2-1316405617
i2e
2011-09-19 08:13
2011.12.25
Прозрачный фон при выводе текста


1-1277967525
istok
2010-07-01 10:58
2011.12.25
TChart...


6-1249275041
Dmitriy
2009-08-03 08:50
2011.12.25
разделение трафика


15-1315548799
user1987
2011-09-09 10:13
2011.12.25
Часы на рабочем столе


3-1269079265
Alexsis f
2010-03-20 13:01
2011.12.25
Внешние ключи (error 150)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский