Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
701 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wie sicher ist wm_copydata

  Alt 18. Mai 2022, 14:10
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.
Peter Below
  Mit Zitat antworten Zitat