• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

进程间的相互调用与参数传递【Delphi版】

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、主要场景

        a)主程序启动另外一个程序,并传递参数

        b)主进程向一个已经运行中的程序传递参数

二、代码

    1)调用程序:

var
  HWND: DWORD;
  ApplicationHWND:DWORD;
begin
  HWND:=FindWindow('TFrmMain', '参数接收窗口');
  ApplicationHWND:=GetWindow(HWND,GW_OWNER);
  if HWND <> 0 then
  begin
     memo1.Lines.Add('参数接收程序已运行,向参数接收窗口投递消息。。。');
     SendMessage(HWND,WM_TEST,0,0);

     SetForegroundWindow(HWND);
     SetActiveWindow(HWND);
     ShowWindow(ApplicationHWND,   SW_RESTORE);
    // ShowWindow(HWND, SW_SHOWNORMAL); --此种方式会造成被调用的窗口无法最小化。。。
  end
  else
  begin
     memo1.Lines.Add('参数接收程序未运行,启动程序的同时传递参数。。。');
     ShellExecute(Handle, 'Open', '..\ParamReceiver\ParamReceiver.exe', '参数1 参数2', nil, SW_SHOWNORMAL);
  end;
end;

    2) 接收程序:

         获取被启动时传递过来的参数

var
  receivedParam_0,receivedParam_1,receivedParam_2:string;
begin
  receivedParam_0:=ParamStr(0);
  receivedParam_1:=ParamStr(1);
  receivedParam_2:=ParamStr(2);

  Memo1.Lines.Add('程序被启动的同时收到参数。。。');
  Memo1.Lines.Add('ParamStr(0)='+receivedParam_0);
  Memo1.Lines.Add('ParamStr(1)='+receivedParam_1);
  Memo1.Lines.Add('ParamStr(2)='+receivedParam_2);
end;

         获取运行过程中传递过来的参数(消息响应)

begin
  Memo1.Lines.Add('窗口接收到定向投递过来的参数。。。');
  Memo1.Lines.Add('具体的参数可通过内存映射文件实现进程间共享!!');
  //Application.Restore;
end;

三、运行结果

    a)主程序启动另外一个程序,并传递参数

      调用程序:

     

      接收程序:

     

    b)主进程向一个已经运行中的程序传递参数

       调用程序:

      

       接收程序:

      


     PS: 1)一个进程调用另一个程序的主窗体: ShowWindow(Application.handle,SW_RESTORE)
            2)一个进程调用另一个程序的子窗体: a)发送消息给被调用程序
                                                               b)被调用程序收到消息后,使用form.show显示子窗体
    

     注:1)防止出现ShowWindow函数调用之后出现:被调用窗口无法最小化的问题,
             不可直接使用ShowWindow(Form.handle,---).
           2)在Delphi中API函数ShowWindow对delphi的form不太管用,一般都需要发送Application来恢复。
           3)使用内存映射文件进程间传递参数参见:

                                         http://www.cnblogs.com/edisonfeng/archive/2012/05/21/2511975.html

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab中bar画自定义柱状图发布时间:2022-07-18
下一篇:
使用MATLAB获取视频中每一帧的图像发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap