AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

WM_COPYDATA sendet nur 62 Bytes

Ein Thema von Kostas · begonnen am 8. Feb 2021 · letzter Beitrag vom 8. Feb 2021
Antwort Antwort
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
901 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

WM_COPYDATA sendet nur 62 Bytes

  Alt 8. Feb 2021, 16:08
Hallo Zusammen,

ich versuche hiermit einen String zu einer anderen Delphi App zu senden. Der String ist 120 Bytes lang.
Gesendet werden jedoch nur die ersten 62 Bytes. Hat jemand eine Idee warum?


Delphi-Quellcode:
procedure TfrPlantafel.SendData(aImage, aLink, aText: String);
var receiverHandle : THandle;
   copyDataStruct : TCopyDataStruct;
   SendMsgText: String;
begin
 receiverHandle := FindWindow(PChar('TfrSenderApp'),PChar('frSenderApp'));
 SendMsgText := Format('%s;%s;%s',[aLink, aImage, aText]); //<< SendMsgText ist 120 Bytes lang.

 
 
 if receiverHandle > 0 then
 begin
   copyDataStruct.dwData := Ord(ntSendWhatsAppMsg);
   copyDataStruct.cbData := 1 + Length(SendMsgText);
   copyDataStruct.lpData := PChar(SendMsgText);

   SendMessage(receiverHandle, WM_COPYDATA, LPARAM(Handle), WPARAM(@copyDataStruct)) ;
 end else
 begin
   bsm('Die Sender Anwendung läuft nicht.');
 end;
end;

Gruß Kostas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.731 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: WM_COPYDATA sendet nur 62 Bytes

  Alt 8. Feb 2021, 16:16
Zitat:
copyDataStruct.cbData := 1 + Length(SendMsgText);
Wie groß ist seit D2009 ein Char (WideChar) eines String (UnicodeString) ?


Und gerade bei solchen prozessübergreifenden Daten verwendet man NIEMALS "dynamische" DatenFormate (maximal dann, wenn man auch das Format mit übergibt und der Andere das dann auch beachtet)

Also z.B. explizit WideChar (mit PWideChar und WideString bzw. UnicodeString).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 8. Feb 2021 um 16:19 Uhr)
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
901 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: WM_COPYDATA sendet nur 62 Bytes

  Alt 8. Feb 2021, 16:40
Danke für die Antwort.

vermutlich habe ich dich nicht richtig verstanden, ich habe String durch WideString ersetzt und PChar durch PWideChar.
Das hat noch nichts gebracht. Oder meintest du ich soll nicht String sondern ein Array of WideChar verwenden?


Delphi-Quellcode:
procedure TfrPlantafel.SendData(aImage, aLink, aText: String);
var receiverHandle : THandle;
   copyDataStruct : TCopyDataStruct;
   SendMsgText: WideString;
begin
 receiverHandle := FindWindow(PChar('TfrSenderApp'),PChar('frSenderApp'));
 SendMsgText := Format('%s;%s;%s',[aLink, aImage, aText]); //<< SendMsgText ist 120 Bytes lang.

 
 
 if receiverHandle > 0 then
 begin
   copyDataStruct.dwData := Ord(ntSendWhatsAppMsg);
   copyDataStruct.cbData := 1 + Length(SendMsgText);
   copyDataStruct.lpData := PWideChar(SendMsgText);

   SendMessage(receiverHandle, WM_COPYDATA, LPARAM(Handle), WPARAM(@copyDataStruct)) ;
 end else
 begin
   bsm('Die Sender Anwendung läuft nicht.');
 end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.287 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: WM_COPYDATA sendet nur 62 Bytes

  Alt 8. Feb 2021, 17:04
cbData bezeichnet die Byte-Größe.
copyDataStruct.cbData := 1 + Length(SendMsgText * SizeOf(Char)); [edit]Es müsste wohl eher heißen
copyDataStruct.cbData := (1 + Length(SendMsgText)) * SizeOf(Char); [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH ( 8. Feb 2021 um 17:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.731 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: WM_COPYDATA sendet nur 62 Bytes

  Alt 8. Feb 2021, 17:09
Wenn das als PChar/PWideChar übertragen wird, dann gehört die abschließende #0 mit dazu
und die ist auch 2 Byte groß.

Delphi-Quellcode:
copyDataStruct.cbData := (Length(SendMsgText) + 1) * SizeOf(WideChar);
copyDataStruct.lpData := PWideChar(SendMsgText);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
901 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: WM_COPYDATA sendet nur 62 Bytes

  Alt 8. Feb 2021, 17:13
Herzlichen Dank, genau so funktioniert es.
Jetzt ist auch klar was du meintest.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf