Announcement

Collapse
No announcement yet.

Hex-Datenübertragung zwischen 2 Anwendungen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hex-Datenübertragung zwischen 2 Anwendungen

    Hallo miteinander,

    ich brauche mal einen guten Tipp zur Datenübertragung zwischen 2 Anwendungen innerhalb eines PCs.
    Anwendung 1 (im SysTray) muss hexadezimale Daten als Block (max. 255 Bytes) zu Anwendung 2 (normale Fensteranwendung) schicken. Dazu meine Fragen:
    Kann man die API SendMessage verwenden und dazu anstelle von WParam und LParam einen Datenblock senden. Ich kann zwar eine neue Message mit einem neuen Message Record definieren, aber die Länge der SendMessage Prozedur ist festgelegt auf WParam und LParam. Mit der Message WM_COPYDATA kann ich nur maximal 32 Bytes versenden.
    Oder kann ich zum Austausch einen Speicherblock verwenden, der dann aber nicht nur lokal, sondern in beiden Anwendungen zur Verfügung stehen muss.
    Der Austausch über Strings (z.B. Atoms) ist recht umständlich, da ich die Hexwerte erst konvertieren müsste.
    Für einen guten Tipp wäre ich sehr dankbar.

  • #2
    Also ich habe mit WM_COPYDATA-Nachrichten mehrere KByte an Daten pro Block ausgetauscht, seit wann ist WM_COPYDATA limitiert ?<p>

    Gruß Nic

    Comment


    • #3
      Hallo,

      die Größe des Datenblocks kann in der <b>COPYDATASTRUCT</b>-Struktur definiert werden. Das folgende Beispiel aus meinem Buch <i>Delphi Win32-Lösungen</i> demonstriert das Prinzip:
      <pre>
      procedure TFormTx.BitBtnSendClick(Sender: TObject);
      var
      aCopyData : TCopyDataStruct; // Instanz des Records
      hTargetWnd : hWnd; // Fensterhandle von FRMRX
      begin
      with aCopyData do begin
      // keine benutzerdefinierten zusätzlichen Daten
      dwData := 0;
      // zu übertragende Textlänge mit NULL-Zeichen
      cbData := StrLen(PChar(Edit1.Text)) + 1;
      // Zeiger auf den nullterminierten Textstring
      lpData := PChar(Edit1.Text)
      end;
      // Fenster anhand dem Titelzeilentext suchen
      hTargetWnd := FindWindowEx(0, 0, nil, PChar('WM_CopyData-Empfänger'));
      if hTargetWnd <> 0
      then SendMessage(hTargetWnd, WM_CopyData, LongInt(Handle), LongInt(@aCopyData))
      // kein passendes Fenster gefunden
      else StatusBar1.SimpleText := 'Kein Empfänger gefunden';
      end;
      </pre&gt

      Comment

      Working...
      X