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》一書。