Hallo zusammen,
Delphi-Quellcode:
procedure TForm2.WMCopyData(var Message: TWMCopyData);
var
sText: String;
begin
if (Message.CopyDataStruct.dwData = 17268) then
// anzuzeigenden Text aus den Parametern generieren
SetString(sText, PWideChar(Message.CopyDataStruct.lpData), Message.CopyDataStruct.cbData)
else
sText := 'Nichts für mich dabei';
// Empfangenen Text ausgeben
la1.Caption := sText;
end;
Meine Fragen sind nun:
Ist der Code so korrekt incl. Behandlung des Strings?
Nein. cbData enthält die Zahl der
Bytes in lpData^, SetString erfordert aber die Zahl der
Zeichen.
Nimm einfach
sText := PWideChar(Message.CopyDataStruct.lpData);
Da der gesendete String #0-terminiert ist sollte das klappen.
Zitat:
Kann es je nach System/Umgebung Probleme mit Firewall/Virenscanner/Windows-Versionen geben?
Glaube ich nicht, aber glauben heißt nicht wissen
.
Zitat:
Kann es sein, dass andere Anwendungen den Text abfangen? Hier meine ich eher aus Versehen, nicht bewusster Versuch, Messages abzuhören. Und es soll ein recht eindeutiger Form-Name verwendet werden.
Es gibt globale message hooks, die auch wm_copydata mitbekommen, also ja, das kann passieren. Wenn es um kritische Daten geht solltest Du sie also verschlüsseln.
Zitat:
Kann man die Message auch an den
Handle eines Programms schicken und nicht direkt an ein Form?
Man kann Messages nur an Window- oder Threadhandles schicken, wobei ein Ziel-Thread eine Message Loop oder Equivalent (MsgWaitFor...) haben muss.