如何使用sendmessage 传递文本
解决方案 »
- 怎么插入日期时间(以浮点数的形式)Access
- 寻开发LIS系统所需的某些设备接口协议
- 高手们救救我--"e:\aa.exe"怎么做,可以通过http的方式访问,如(http://127.0.0.1/aa.exe);
- 多用户同时操作同一个记录,无法保存
- 疑惑!!调用windows API KERNEL32.DLL函数的问题。
- 急!! 关于套打的精确定位
- 在DELPHI7里我知道别人用户名和密码,IP,请问要怎么才能访问他的电脑
- delphi中实现3层数据库应用服务客户端时出错
- WINDOWS右键中WINZIP、ICQ等如何去除,请进来看看
- 如何监视串口的数据???
- 谁有 Delphi6 Update2 的序列号?网上搜索不到
- 谁知道学习Authware用什么书最好?来者有分,UP有分!!
(只能是同一个进程里面)
在同一个进程有效。
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.
发送的时候使用sendcopydata接受的时候,只要处理sm_copydata消息,并用getcopydata来处理这个twmcopydata消息。返回值就是你传递的string;不必担心string中有#0会丢失后面的数据。不会有这个问题。不但字符串可以,你还可以传递任何二进制信息。处理方法与上类似。