【IPC程式間通訊之四】資料複製訊息WM_COPYDATA

Love_Hulidear發表於2014-05-20

IPC程式間通訊+資料複製訊息WM_COPYDATA

      
        IPC(Inter-Process Communication,程式間通訊)。
        資料複製訊息WM_COPYDATA是Windows中一個特殊的訊息,通過這個訊息可以在程式間傳遞資料。

       1.WM_COPYDATA:

        WM_COPYDATA訊息含兩個引數WPARAM wParam和LPARAM  lParam,WPARAM和LPARAM是匈牙利命名法,歷史更迭,WPARAM指32位整形變數,LPARAM指32為整形變數指標。傳送WM_COPYDATA時,wParam賦值為傳送此訊息的視窗,lParam則指向一個COPYDATASTRUCT結構
       typedef struct{
                ULONG_PTR   dwData;
                DWOED   cdData;
                PVOID   lpData;
        };
        該結構體中,dwData可以使任意值,lpData是需要傳送給視窗所在程式的資料地址,cbData是lpData傳送資料的位元組數。
        在傳送WM_COPYDATA訊息時,系統會把COPYDATASTRUCT及lpData指向的內容傳送給目標程式。目標程式接收到WM_COPYDATA訊息後,可以從lParam引數中提取出資料

         2.WM_COPYDATA傳送端:

         建立視窗  ->   填充COPYDATASTRUCT   ->   SendMessage傳送WM_COPYDATA資料。
         COPYDATASTRUCT cds;            //定義COPYDATASTRUCT變數
         
         SendMessage(
                  hwndto,                                 //目標視窗控制程式碼
                  (UINT)WM_COPYDATA,      //指定傳送的資料
                  (WPARAM)hwndfrom,         //將源視窗控制程式碼做WPARAM引數
                  (LPARAM)&cds                    //將COPYDATASTRUCT做LPARAM引數
         );

         3.WM_COPYDATA接收端:
        
         通過lPrama引數獲取COPYDATASTRUCT  ->  從COPYDATASTRUCT中提取資料。
         COPYDATASTRUCT  *PointCds = (COPYDATASTRUCT *)lParam;
         PointCds->lpData則是傳輸的資料。
               
                4.牛刀小試:

        由於測試程式涉及到視窗建立,較為複雜,附上工程檔案:
        傳送端:點選下載
        接收端:點選下載
       上訴程式編譯環境均為VS 2012
       上訴程式參考了《精通 Windows API》一書。

相關文章