天天看點

【IPC程序間通信之四】資料複制消息WM_COPYDATA 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》一書。

繼續閱讀