Здравствуйте, x64, Вы писали:
DTB>>если не ошибаюсь, никто не мешает создать невидимое окно (даже сервису), и заниматься пересылкой через него
x64>Насколько мне известно, окна принадлежат какому-либо конкретному рабочему столу (и конкретному сеансу). Соответственно, если служба не интерактивная (а в Vista оно всегда так), то такой подход работать не будет.
Позволю себе немного расширить Ваш ответ, если не возражаете
Все окна и потоки привязаны к Desktop'y, каждый Desktop принадлежит Window station, и у каждой терминальной сессии свой набор Window Stations. Поток не может послать сообщение (любое) окну, привязанному к другому десктопу даже в пределах одной оконной станции. Но, насколько помню, поток может послать сообщение другому потоку, даже если эти два потока привязаны к разным столам в разных станциях. Возможно ли это проделать между потоками в разных терминальных сессиях, не знаю, но очень сомневаюсь. Хотя как-нибудь надо-бы проверить, я экспериментировал ещё на W2k без terminal service, и больше к этому не возвращался.
Но в любом случае, WM_COPYDATA можно отправлять только синхронно, то есть только окну, PostThreadMessage не годится.
В принципе, в системе без Terminal Service сервис мог бы сделать один из своих потоков "интерактивным", подключив его к интерактивному столу, но Terminal Service переводят его в разряд экзотитки, не говоря уж о проблемах безопасности.