<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    嘰哩咕嚕

    君子如玉,上善若水

    delphi 進程間通信的兩種方法



    WIN下面進程間通信的最常用辦法就是消息了.

    下面記錄兩種消息通信的方式:
     --------------------------------------------------------------------------------------------
    一.第一種辦法,利用注冊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;
     













    posted on 2010-08-31 14:31 嘰哩咕嚕 閱讀(4053) 評論(0)  編輯  收藏 所屬分類: delphi


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    公告

    瘋狂

    導航

    <2010年8月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    統計

    常用鏈接

    留言簿

    隨筆分類(17)

    隨筆檔案(22)

    文章分類(1)

    文章檔案(1)

    工程教程

    牛人BLOG

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一区二区三区写真| 亚洲国产精品免费视频| 亚洲乱妇熟女爽到高潮的片| 69av免费视频| 亚洲精品中文字幕无乱码麻豆| 蜜臀98精品国产免费观看| 亚洲色大成网站www永久| 久久国产免费观看精品3| 亚洲婷婷天堂在线综合| 亚洲一区二区三区免费观看| 亚洲毛片免费观看| 免费精品国产日韩热久久| 亚洲AV无码一区二区三区牛牛| 丁香花在线观看免费观看| 亚洲Av永久无码精品一区二区| 国产高清在线免费| 一级做a毛片免费视频| 亚洲乱码国产一区三区| 久久久久国产免费| 亚洲国产精品网站久久| 欧洲精品成人免费视频在线观看 | 亚洲福利一区二区| 精品香蕉在线观看免费| 亚洲日韩看片无码电影| 亚洲国产aⅴ综合网| 中文字幕日本人妻久久久免费| 亚洲精品视频免费看| 在线播放高清国语自产拍免费| 亚洲第一se情网站| 亚洲va无码va在线va天堂| 国产a视频精品免费观看| 国产成人亚洲精品91专区高清| 亚洲人成图片小说网站| 四虎免费影院ww4164h| 小说专区亚洲春色校园| 亚洲av无码成h人动漫无遮挡| ww4545四虎永久免费地址| 老妇激情毛片免费| 亚洲白嫩在线观看| 亚洲成a人片在线观看老师| 99久久免费精品高清特色大片|