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