.net – Raise “global” events in .NET via executable

eventsnet

I am not sure about how to do it, and what to search for…

I want a simple executable which "raises an event". I know, this sound crazy and is most likely described with the wrong terms. Lets go back a few steps and describe the scenario:

I just bought a nice Wacom Pen + Touch. I also have a Logitech MX Laser Mouse with some fance buttons. And my keyboard has some nice functional buttons too… So a lot of ways to control stuff, and I tend to do "everything" in .NET and WPF (in the hopefully near future)..

The problem is however, I do not have the time to dig into each of the drivers to make sure they work "natively" with .NET. But most configure apps (wacom, setpoint) allow the assignment of applications to buttons.

So my idea is a simple executable compiled only for one purpose: Raising an event when called. Something like "WacomButton1Pressed.exe".

I know WCF but I think this is overkill, the app should not need to connect to a webservice. Is there any other "loosly coupled" model in .NET which allows me to subscribe to "global events". I know a little bit about application domains, for starters assume everythings runs at the lowest security level (GAC switched off, I am admin, Windows 7)…

Is there some "global" event broker (comparable to the EventAggregator in PRISM e.g.) on operation system level where I can raise and listen to events. If not, any idea for a workaround which takes little to none "detail knowledge" (this is kind of play around low priority, so on the one side, I want to do it "right", on the other side, I can't spend to much time for basic research 🙂

Thanks for any tips,
Chris

PS: Search terms are welcome, Event is not the most google friendly word 🙂

Best Answer

I know you already considered and dismissed WCF, but I would advice you to reconsider. WCF is so much more than web services - basically, it should be your default choice of a communication stack as soon as you need to talk across processes (whether that is internally on the same machine, or across machine boundaries).

You can use named pipes with WCF, which is what I would do in this scenario.