{---------------------------------------- WMCOPYDATAメッセージの送信受信のユニット 2012/10/11(木) ・ 作成 ◇実装例: type TForm1 = class(TForm) private FWMCopyDataConnection: TWMCopyDataConnection; procedure WMCopyData(var msg: TWMCopyData); message WM_COPYDATA; end; const SIGNATURE_STRING: DWORD = $00000001; procedure TForm1.FormCreate(Sender: TObject); begin FWMCopyDataConnection := TWMCopyDataConnection.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin FWMCopyDataConnection.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin FWMCopyDataConnection.SendText(Self.Handle, SIGNATURE_STRING, Memo1.Text); end; procedure TForm1.WMCopyData(var msg: TWMCopyData); var ReceiveText: String; begin if FWMCopyDataConnection.ReceiveText(msg, SIGNATURE_STRING, ReceiveText) then begin Memo2.Text := ReceiveText; end else begin inherited; end; end; //----------------------------------------} unit WMCopyDataUnit; interface uses Windows, Messages, SysUtils, // MECSUtils, end_uses; type TWMCopyDataConnection = class public procedure SendText(Handle: THandle; KeyNumber: DWORD; Text: String); function ReceiveText(WMCopyDataMessage: TWMCopyData; KeyNumber: DWORD; out ReceiveText: String): Boolean; end; implementation procedure TWMCopyDataConnection.SendText(Handle: THandle; KeyNumber: DWORD; Text: String); var CDS: TCopyDataStruct; begin CDS.dwData := KeyNumber; // CDS.cbData := (MecsCharToElementLen(Text, MecsLength(Text)) + 1) * StringElementSize(Text); // CDS.cbData := (Length(Text) + 1) * SizeOf(Char); CDS.cbData := ByteLength(Text) + ByteLength(#0); {↑文字列+#0のサイズのバイトを確保する} CDS.lpData := PChar(Text); SendMessage(Handle, WM_COPYDATA, WPARAM(Handle), LPARAM(Addr(CDS))); end; function TWMCopyDataConnection.ReceiveText(WMCopyDataMessage: TWMCopyData; KeyNumber: DWORD; out ReceiveText: String): Boolean; var buf: PChar; begin ReceiveText := ''; Result := False; if WMCopyDataMessage.CopyDataStruct.dwData = KeyNumber then begin Result := True; ReceiveText := PChar(WMCopyDataMessage.CopyDataStruct.lpData); end; end; end.