delphi如何给另一个程序发送指令,程序接收到指令之后执行操作
一个程序名是project1,,另一个程序是project2,现在点击project1的一个button,给project2发送一个指令,project2接收到之后执行操...
一个程序名是project1,,另一个程序是project2,现在点击project1的一个button,给project2发送一个指令,project2接收到之后执行操作,比如重启,改怎么实现?我试了这个, http://topic.csdn.net/u/20080304/23/019adeef-71a2-4f51-87b8-a0533a644814.html 没成功。要具体的源码。谢谢了
展开
1个回答
推荐于2018-03-31
展开全部
这个叫进程间通信,你说的那个是在同一个进程内的,进程间通信是在不同进程之间传送数据或信号的一些技术或方法。windows支持很多种进程间通信的方法,如窗口消息,共享内存,消息管道,Windows套接字,COM/DCOM等等,具体源码搜"delphi 进程间通信"可找到很多。下面只是一例:一.第一种办法,利用注册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(varmsg: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(varm: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;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询