進程間的相互調用與參數傳遞【Delphi版】


一、主要場景

        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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM