In our application (a document management system) we are supposed to be notified of screen changes (or notify the other program of screen changes) in order to keep the two a
Named pipes and mailslots are still some of the best choices available, and they work cross-user as well as cross-process. Of course in Vista+ there are issues with processes running at different integrity levels, and security applies on earlier OSs as well - much like file security.
TCP is always significantly slower within the same machine, probably even worse than WM_COPYDATA across processes.
Using pipes or mailslots you can handle terminal services by making the session ID part of the name. TCP will always be challenged by its limited "namespace" of port numbers (imagine a hard drive that can only have files named 0 through 65535 - and each connection requires TWO port numbers).