在Windows程序中城侧,各個(gè)進(jìn)程之間常常需要交換數(shù)據(jù),進(jìn)行數(shù)據(jù)通訊赞咙。常用的方法有
-> 使用內(nèi)存映射文件
-> 通過共享內(nèi)存DLL共享內(nèi)存
-> 使用SendMessage向另一進(jìn)程發(fā)送WM_COPYDATA消息
比起前兩種的復(fù)雜實(shí)現(xiàn)來,WM_COPYDATA消息無(wú)疑是一種經(jīng)濟(jì)實(shí)惠的一中方法.
使用方法:
SendMessage(hwnd,WM_COPYDATA,wParam,lParam);
其中,WM_COPYDATA對(duì)應(yīng)的十六進(jìn)制數(shù)為0x004A
wParam設(shè)置為包含數(shù)據(jù)的窗口的句柄近上。lParam指向一個(gè)COPYDATASTRUCT的結(jié)構(gòu):
typedef struct tagCOPYDATASTRUCT
{
DWORD dwData;//用戶定義數(shù)據(jù)
DWORD cbData;//數(shù)據(jù)大小
PVOID lpData;//指向數(shù)據(jù)的指針
}COPYDATASTRUCT;
該結(jié)構(gòu)用來定義用戶數(shù)據(jù)。
有時(shí)候WM_COPYDATA收不到信息的問題:
1宿饱、SendMessage()函數(shù)中,wParam不能為空脚祟,有時(shí)候做測(cè)試時(shí)會(huì)出現(xiàn)谬以,lParam可以為空;
2由桌、低權(quán)限進(jìn)程不能想高權(quán)限發(fā)送該消息为黎,同時(shí)也包括其他許多消息也是如此。