C # Создание системных событий, которые могут видеть другие приложения - PullRequest
2 голосов
/ 07 октября 2011

Я пытаюсь придумать способ вызвать публичное событие, которое можно увидеть более чем одним приложением.Первое, что приходит на ум, это SystemEvents.

Есть ли способ «определить» новое SystemEvent или даже публичное событие, которое могут видеть и прослушивать несколько приложений.

Ответы [ 3 ]

2 голосов
/ 07 октября 2011

Вам действительно нужно использовать SystemEvent? Как насчет других методов для IPC

IpcChannel - это альтернативный метод, который соответствует вашим требованиям.

1 голос
/ 07 октября 2011

В основе SystemEvents лежат сообщения Windows, которые передаются всем окнам верхнего уровня. Сообщения типа WM_SETTINGCHANGED. Вы также можете передавать сообщения, вызывая SendMessageTimeout с помощью HWND_BROADCAST. Это несколько рискованно, вы будете отправлять сообщения в программы, которые никогда не видели номер сообщения раньше. По крайней мере, вам нужно будет использовать RegisterWindowMessage (), чтобы убедиться, что вы получаете уникальный номер сообщения, который известен вам и процессам, о которых вы хотите знать об уведомлении, и не путать остальные из них.

Существуют более надежные механизмы с меньшим риском, например сервер именованных каналов.

1 голос
/ 07 октября 2011

Я не думаю, что для этого существует простой .Net. Единственный известный мне способ - использовать PostMessage или SendMessage в очереди событий Windows. Вы можете прочитать подробности О сообщениях и очередях сообщений . Существует множество ресурсов для вызова этих собственных команд в Google, но одним из лучших для начала является pinvoke.net .

...