我的想法是
能不能用SendMessage或PostMessage 发送消息(包含字符串的头地址),收到消息后,再去那个地址取字符串!
能不能用SendMessage或PostMessage 发送消息(包含字符串的头地址),收到消息后,再去那个地址取字符串!
解决方案 »
- Delphi里使用QuickReport双面打印时头尾方向相反
- 直接用TWAIN.DLL控制扫描仪的程序
- 万条数据时,速度特别慢,如何解决?
- TreeView1控件,怎样让某些节点有右键弹出按钮,某些没有右键!
- 這樣的報表怎樣實現?
- 急急,怎样在delphi中显示我作的网页!在线等待!!!
- 虛擬內存,多縣程處理
- 怪怪怪!!!!在使用MKDir函数后才出现这个错误。如果在程序中不使用该命令,则不会出现错误。
- Delphi6为什么不能在Windows 2000与Windows Me下安装?大家的可不可以呀?
- 恳请高手指点
- 如何把字符串转换成对象?想用for循环将其批量选中,该如何做啊!
- 一个比较复杂的替换问题,涉及到UNICODE,高手请入
procedure TfrmMain.SendWinMessage (msg : string);//msg为要发送的消息
var
copyData : TCopyDataStruct;
hwnd : THandle;
begin
copyData.cbData := Length (msg) + 1;
GetMem (copyData.lpData,copyData.cbData);
StrCopy (copyData.lpData,PChar (msg));
hwnd := FindWindow (nil,PChar ('目标程序的标题'));
if hwnd <> 0 then
SendMessage (hwnd,WM_COPYDATA,Handle,Cardinal(@copyData))
FreeMem (copyData.lpData);
end;接收消息例子:
procedure ReceiveWinMessage (var copyData:TWmCopyData);message WM_COPYDATA;
...
procedure TfrmMain.ReceiveWinMessage (var copyData:TWmCopyData);
var
rcvBuf : string;
begin
rcvBuf := StrPas (copyData.CopyDataStruct^.lpData);
showmessage ('收到消息:'+rcvBuf);
end;
unit sendunit;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
procedure SendData;
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.SendData; //发送消息和数据过程
var
Copydatastruct: TCopyDataStruct; //定义一个Tcopydatastruct类型的变量
hwnd: THandle; //句柄类型,用于存储目标对象的句柄
begin
Copydatastruct.cbData := Length (Edit1.Text) + 1; //为传递的数据区分配内存并把要传送的字符串放入数据区
GetMem (Copydatastruct.lpData, Copydatastruct.cbData );
StrCopy (Copydatastruct.lpData, PChar (Edit1.Text)); // 获得接收窗口的句柄
Hwnd := FindWindow (nil, '利用WM_COPYDATA进行数据交换演示Receive ');// 如果目标对象存在,则向其发送WM_COPYDATA消息
if Hwnd <> 0 then
SendMessage (Hwnd, WM_COPYDATA, Handle, Cardinal(@Copydatastruct))
else
ShowMessage ('目标对象窗口没找到!'); //释放资源
FreeMem (Copydatastruct.lpData);
end;procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if Edit1.Text<>'' then
SendData;
end;end.
///////////////////////////////////////////////////////////////////////////
unit Receiveunit;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
private
{ Private declarations }
public
procedure Capturemessage(var CopyData:TWmCopyData);message WM_COPYDATA;
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.Capturemessage(var CopyData:TWmCopyData);
begin
Edit1.text:=StrPas(CopyData.CopyDataStruct^.lpData);//接收数据获取数据并显示
end;
end.