Recently I had had to communicate two applications of different tecnologies (.NET and Visual Basic 6) they executes in the same machine. Between all of communications process techniques that exists (Sockets, Named Pipes, Memory-mapped files, etc.) the Windows API functions FindWindow, SendMessage and WM_COPYDATA message was the best option for this scenario. Using these functions and message I programmed two libraries (.NET and COM version) that allow to communicate two or more applications that execute in the same computer using the Observer pattern.
Download the code and a sample of use from here.