delphi 进程间通信的两种方法
来源:互联网 发布:java校招笔试题 编辑:程序博客网 时间:2024/06/05 20:21
下面记录两种消息通信的方式:
--------------------------------------------------------------------------------------------
一.第一种办法,利用注册Windows全局的消息.并覆盖wndProc过程来监听消息处理.
1.
发送消息方:
private
strWM:Cardinal; //定义一个局部变量
...
proccedure Form1.Create(sender:TObject);
begin
strWM:= RegisterWindowMessage('newspopMessage'); //注册一个windows全局消息,通过这个消息与其它进程通信
end;
...
procedure Form1.Button1Click1(Sender:TObject);
var
h:Cardinal;
begin
//通信的步骤得先找到要通信的信息窗口Handle
h:=findWindow('目标进程窗口类名','窗口Caption');
//发送消息消息类型为自定义的strWM
SendMessage(h,strWM,0,0); //这里同样可以带参数.wParam,lParam.但我传一个PChar,读取的时候总报错.不知道为啥
end;
2.
接收消息方:
private
strWM:Cardinal; //定义一个局部变量
procedure wndProc(var msg:Tmessage);override; //覆盖这个方法,可以监听所有的Windows消息回调函数
...
proccedure Form1.Create(sender:TObject);
begin
strWM:= RegisterWindowMessage('newspopMessage'); //注册一个windows全局消息,这个相当于暗号
end;
procecure form1.wndProc(var msg:TMessage);
begin
//在这里处理这个消息就行了
showmessage(strpas(PChar(mes.lparam))); //这样写会报错的.但可以处理其它无参数的事情
end;
----------------------------------------------------------------------------------------------
二.第二种办法,发送一个WM_COPYDATA的消息.并且可以带一个TCopyDataStruct的结构类型参数.
1.
发送消息方:
procedure TMainForm.CallAgent(msg: string);
var
HlAgent:HWND;
ds:TCopyDatastruct; //定义一个TCopyDatastruct结构体变量
begin
AgentMsg := msg;
ds.cbData := Length(msg)+1; //结构体的第一个元素: 长度cbData
GetMem(ds.lpData,ds.cbData); //分配内存,结构体的第二个参数: 数据的指针lpDATA
StrCopy(ds.lpData,PChar(msg)); //复制值到结构指针
HlAgent :=FindWindow('TmsgpopMainCaller','调用者'); //查找目标窗体的Handle
if HlAgent <> 0 then
begin
//ShowMessage('主' + IntToStr(Cardinal(@ds)));
SendMessage(HlAgent,WM_COPYDATA,0,Cardinal(@ds)); //发送WM_COPYDATA消息,并带上参数 @ds
end;
FreeMem(ds.lpData); //释放数据内存
end;
2.
接收方程序:
public
procedure MyMessage(var m:TWmCopyData);message WM_CopyData; //定义一个消息响应过程,并传入一个TWmCopyData的参数
...
procedure TmsgpopMainCaller.MyMessage(var m: TWmCopyData); //实现响应
var
msg:string;
begin
msg :=StrPas(m.CopyDataStruct^.lpData); //获取参数数据
ShowMessageForm := TShowMessageForm.Create(self,msg); //处理
end;
- delphi 进程间通信的两种方法
- delphi 进程间通信的两种方法
- C语言两种方法实现进程间 socket 通信
- Delphi 进程间通信
- delphi杀进程的两种方式
- 进程间通信的几种方法
- 进程间通信的11种方法
- 进程间通信的11种方法
- 进程间通信的11种方法
- 进程间通信的11种方法
- 进程间通信的11种方法
- 进程间通信的几种方法
- 进程间通信的方法
- 进程间通信的方法
- 进程间通信的方法
- 进程间通信的方法
- 进程间通信的方法
- 进程间通信的方法
- 实现进度条(JSP代码
- WAV,MDI播放
- IT老人的经验 [转]
- Android library projects cannot be launched问题的解决
- USACO 4.2 cowcycle 搜索 DFS
- delphi 进程间通信的两种方法
- DiskGenius磁盘分区恢复文件全过程
- java 网络编程【3】 UDP详解及其相关实例
- SSH 生成execl
- linux上java路径设置
- 半导体技术未来的发展趋势
- Linux 防火墙配置和开关
- CRecordset::Open
- Delphi 两个应用程序(进程)之间的通信