首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从一个Delphi程序实例发送字符串到另一个实例?

要在Delphi程序实例之间发送字符串,可以使用以下方法:

  1. 使用Windows API函数:

在发送方实例中,使用FindWindow函数找到接收方实例的窗口句柄,然后使用SendMessage函数发送字符串。

在接收方实例中,使用WM_COPYDATA消息来接收字符串。

示例代码:

发送方实例:

代码语言:delphi
复制
uses Winapi.Windows, Winapi.Messages;

const
  WM_COPYDATA = $004A;

type
  PCopyDataStruct = ^TCopyDataStruct;
  TCopyDataStruct = record
    dwData: ULONG_PTR;
    cbData: DWORD;
    lpData: PVOID;
  end;

var
  hWndReceiver: HWND;
  s: string;
  cds: TCopyDataStruct;

begin
  hWndReceiver := FindWindow(nil, 'ReceiverWindowName');
  if hWndReceiver <> 0 then
  begin
    s := 'Hello, this is a string from sender instance.';
    cds.dwData := 0;
    cds.cbData := Length(s) * SizeOf(Char);
    cds.lpData := PChar(s);
    SendMessage(hWndReceiver, WM_COPYDATA, 0, LPARAM(@cds));
  end;
end;

接收方实例:

代码语言:delphi
复制
uses Winapi.Windows, Winapi.Messages;

const
  WM_COPYDATA = $004A;

type
  PCopyDataStruct = ^TCopyDataStruct;
  TCopyDataStruct = record
    dwData: ULONG_PTR;
    cbData: DWORD;
    lpData: PVOID;
  end;

var
  s: string;

procedure TForm1.WMCopyData(var Msg: TWMCopyData);
begin
  if Msg.CopyDataStruct.dwData = 0 then
  begin
    SetLength(s, Msg.CopyDataStruct.cbData div SizeOf(Char));
    Move(Msg.CopyDataStruct.lpData^, PChar(s)^, Msg.CopyDataStruct.cbData);
    ShowMessage(s);
  end;
end;
  1. 使用共享内存:

在发送方实例中,创建一个共享内存区域,并将字符串写入该区域。

在接收方实例中,打开该共享内存区域,并从中读取字符串。

示例代码:

发送方实例:

代码语言:delphi
复制
uses Winapi.Windows, System.SysUtils;

const
  SharedMemoryName = 'MySharedMemory';

var
  hFileMap: THandle;
  pView: Pointer;
  s: string;

begin
  hFileMap := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, 1024, PChar(SharedMemoryName));
  if hFileMap <> 0 then
  begin
    pView := MapViewOfFile(hFileMap, FILE_MAP_WRITE, 0, 0, 0);
    if pView <> nil then
    begin
      s := 'Hello, this is a string from sender instance.';
      Move(PChar(s)^, pView^, Length(s) * SizeOf(Char));
      UnmapViewOfFile(pView);
    end;
    CloseHandle(hFileMap);
  end;
end;

接收方实例:

代码语言:delphi
复制
uses Winapi.Windows, System.SysUtils;

const
  SharedMemoryName = 'MySharedMemory';

var
  hFileMap: THandle;
  pView: Pointer;
  s: string;

begin
  hFileMap := OpenFileMapping(FILE_MAP_READ, False, PChar(SharedMemoryName));
  if hFileMap <> 0 then
  begin
    pView := MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0);
    if pView <> nil then
    begin
      SetLength(s, 1024 div SizeOf(Char));
      Move(pView^, PChar(s)^, 1024);
      UnmapViewOfFile(pView);
      ShowMessage(s);
    end;
    CloseHandle(hFileMap);
  end;
end;

这两种方法都可以实现在不同的Delphi程序实例之间发送字符串。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

2分59秒

Elastic 5分钟教程:使用机器学习,自动化异常检测

1分6秒

LabVIEW温度监控系统

14分54秒

最近我收到了 SAP 上海研究院一个部门领导的邀请,参加了一个信息素养故事分享会。我也就"如何快速上

领券