Как отправить пользовательское сообщение из пользовательского приложения в приложение SYSTEM?

Я создал службу Windows для запуска моего пользовательского приложения с помощью createProcessAsUser. Результатом является одно приложение, работающее с пользователем SYSTEM в сеансе с идентификатором 0, как я и ожидал. Моя проблема в том, что мне нужно иметь связь между этим приложением и другим, созданным текущим пользователем.

Если произошли какие-либо события на рабочем столе (SC_SCREENSAVE, отключение монитора), события, перехваченные текущими пользовательскими приложениями, я должен сообщить об этом своему приложению SYSTEM. Я использовал:

SendMessage (HWND_BROADCAST, CURRENT_USER_HAS_DONE_SOMETHING, 0, 0);

Даже приложение SYSTEM перехватывает много системных событий (приостановка, выход из системы …) и работает с тем же идентификатором сеанса, мои пользовательские сообщения никогда не перехватываются. Кажется, что Sendmessage не работает для пользователя SYSTEM.

Как я могу отправить сообщение от текущего сеанса пользователя в приложение SYSTEM?

0

Решение

Другим вариантом является использование старого Функция ControlService вместе с определяемым пользователем кодом управления. Он не подходит для сложной связи (вы не можете передать какие-либо параметры в службу), но он хорошо работает для простых уведомлений «что-то произошло», которые вы наметили.

2

Другие решения

Очевидно, что трансляция сообщений не является правильным решением. Хорошее решение, вероятно, CreateEventEx, Это создает именованное событие. Ваше обычное приложение может позвонить SetEvent и SYSTEM Приложение может ждать этого события.

1

Последние версии Windows не позволяют обмениваться сообщениями между сеансами 0 и сеансами рабочего стола. Это называется Сессия 0 изоляция.

Вы можете найти больше информации Вот а также Вот.

Обычными альтернативами являются TCP / IP, каналы, удаленное взаимодействие и т. Д., Которые описаны в этот так ответ.

1