如何使用sendmessage 传递文本

kill_net 2002-12-12 12:28:40
如何使用sendmessage 传递文本
...全文
106 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kill_net 2002-12-12
  • 打赏
  • 举报
回复
我是学c++的对delphi的指针不是很熟悉,该如何做呀
chaosbird 2002-12-12
  • 打赏
  • 举报
回复
自定义一个消息,然后在wParam或者lParam里面传递地址
(只能是同一个进程里面)
stanely 2002-12-12
  • 打赏
  • 举报
回复
sorry,typing mistake.

sm_copydata->wm_copydata
stanely 2002-12-12
  • 打赏
  • 举报
回复
使用很简单:
发送的时候使用sendcopydata

接受的时候,只要处理sm_copydata消息,并用getcopydata来处理这个twmcopydata消息。返回值就是你传递的string;

不必担心string中有#0会丢失后面的数据。不会有这个问题。

不但字符串可以,你还可以传递任何二进制信息。

处理方法与上类似。
stanely 2002-12-12
  • 打赏
  • 举报
回复
//无论在本进程还是多个进程之间,你都可以使用这个单元:

unit CopyData_San;

interface
uses
windows,messages,sysutils;

///////////////////////
procedure GetCopyDataParam(AMsg:TWMCopyData;var wParam:integer;var dwData:cardinal);
function GetCopyData(AMsg:TWMCopyData):string;overload;
procedure GetCopyData(AMsg:TWMCopyData;var P:pointer;var len:integer);overload;
///////////////////////////
function SendCopyData(AHandle:Cardinal;AStr:string;wParam:integer=0;dwData:cardinal=0):integer;overload;
function SendCopyData(AHandle:Cardinal;P:pointer;Len:integer;wParam:integer=0;dwData:cardinal=0):integer;overload;

implementation
function SetData(p:pointer;len:integer;dwData:cardinal):TCopyDataStruct;
begin
result.cbData:=len;
result.lpData:=p;
result.dwData:=dwData;

end;
function SendCopyData(AHandle:Cardinal;AStr:string;wParam:integer=0;dwData:cardinal=0):integer;overload;
var
len:integer;
begin

len:=length(astr);
if len<=0 then exit;

result:=sendcopydata(ahandle,@astr[1],len,wparam,dwdata);

end;

function SendCopyData(AHandle:Cardinal;P:pointer;Len:integer;wParam:integer=0;dwData:cardinal=0):integer;overload;
var
cs:tcopydatastruct;
begin
cs:=setdata(p,len,dwdata);
result:=sendmessage(ahandle,wm_copydata,wparam,Cardinal(@cs));

end;
procedure GetCopyDataParam(AMsg:TWMCopyData;var wParam:integer;var dwData:cardinal);
begin
dwdata:=amsg.CopyDataStruct.dwData;
wparam:=tmessage(amsg).WParam;

end;
procedure GetCopyData(AMsg:TWMCopyData;var P:pointer;var len:integer);
begin
p:=amsg.CopyDataStruct.lpData;
len:=amsg.CopyDataStruct.cbData;
end;
function GetCopyData(AMsg:TWMCopyData):string;
var
i,len:integer;
type
pstr=array of char;
begin
result:='';
len:=amsg.CopyDataStruct.cbData;
if len<=0 then exit;
setlength(result,len);
for i:=1 to len do
begin
result[i]:=pstr(amsg.CopyDataStruct.lpData)[i-1];
end;
end;

end.

Taiji02 2002-12-12
  • 打赏
  • 举报
回复
SendMessage(Handle, WM_MyMessage, Longint("传递文本"), 0);
在同一个进程有效。
budi 2002-12-12
  • 打赏
  • 举报
回复
WM_SETTEXT
WM_COPYDATA

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧