Moin Thomas,
wie oft Du RegisterWindowMessage in einem Programm aufrufst spielt keine Rolle. Wenn jedesmal der gleiche String übergeben wird, erhältst Du auch jedes mal den gleichen Rückgabewert. Deshalb ist es auch wichtig einen eindeutigen String anzugeben.
Aufrufen musst Du das bei allen beteiligten Programmen (müssen nicht nur zwei sein). Damit auch alle die gleiche Message erhalten muss auch bei allen beteiligten Programmen exakt der gleiche String übergeben werden.
Um allen Programmen die die entsprechende Message behandeln können gleichzeitig die Message zu schicken könntest Du
SendMessage(HWND_BROADCAST,.....)
verwenden. Es wird also kein spezielles
Handle angegeben, sondern eben, als Ersatz, HWND_BROADCAST.
Da sich dieser Aufruf allerdings auf alle Fenster bezieht sollte man ihn sparsam einsetzen.