Delphi 进程间通信
来源:互联网 发布:如何看网络3d蓝光电影 编辑:程序博客网 时间:2024/06/16 01:01
下面记录两种消息通信的方式:
--------------------------------------------------------------------------------------------
一.第一种办法,利用注册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 进程间通信(2)
- delphi进程简通信
- delphi 进程间通信的两种方法
- delphi 进程间通信的两种方法
- 进程&进程间通信
- 信号通信(进程间通信)
- 进程间通信-管道通信
- 进程间通信--管道通信
- [进程通信] 进程间通信 之 管道
- 进程与进程间通信
- 【IO进程】进程间通信
- Delphi 两个应用程序(进程)之间的通信
- Delphi 两个应用程序(进程)之间的通信
- Delphi 两个应用程序(进程)之间的通信
- 进程间通信
- 进程间通信方式
- 进程间通信IPC
- android环境搭建之旅--记录我的android环境二次搭建
- crontab与环境变量,以及应该注意的一些问题
- 计算机图书列表
- PHP 5.3 on CentOS/RHEL 5.6 via Yum
- 三点式电容振荡器
- Delphi 进程间通信
- 清除Linux缓存
- vc操作ini文件
- 10分钟学懂Jquery选择器
- Java虚拟机的内存区域划分
- Android WatchDog
- 【转】[iOS]深入浅出 iOS 之多线程 NSThread
- hadoop配置文件&&常用的端口配置
- 【设计模式】修饰模式