Und dann wurde noch etwas ganz Wichtiges vergessen.
Am Ziel wird das als PChar ausgelesen, also muß dort auch zwingend das String-Ende mit übertragen werden.
copyDataStruct.cbData := (Length(Nachricht) + 1) * Sizeof(Char);
Alternativ muß man beim Auslesen des Textes die Länge (copyDataStruct.cbData) verwenden und darf eben nicht bis zum nichtübertragenen/fehlenden Stringende lesen.
Ach ja, wenn hier auch noch zwischen zwei Programmen übertragen wird, dann ist und was es schon immer FALSCH, wenn hier PChar verwendet wird, denn wenn ein Programm
Unicode ist und das Andere nicht, dann hat man ein Problem.
Bei Datenübertragungen muß immer ein fest definiertes und unveränderliches Format verwendet werden, also hier entweder PAnsiChar oder PWideChar.
Oder man übergibt das Format mit und liest dann entsprechend aus.
PS: Ist HWND_BROADCAST hier nicht ein klein bissl gefährlich?
Man stelle sich mal vor ein anderes Programm empfängt und wertet ebenfalls WM_COPYDATA mit copyDataStruct.dwData=0 aus,
das wird da bestimmt kanllen, wenn es unverständliche/ungültige Daten empfängt.