在Windows程序中,各個進程之間常常需要交換數據,進行數據通訊。常用的方法有
-> 使用內存映射文件
-> 通過共享內存DLL共享內存
-> 使用SendMessage向另一進程發送WM_COPYDATA消息
比起前兩種的復雜實現來,WM_COPYDATA消息無疑是一種經濟實惠的一中方法.
使用方法:
SendMessage(hwnd,WM_COPYDATA,wParam,lParam);
其中,WM_COPYDATA對應的十六進制數為0x004A
wParam設置為包含數據的窗口的句柄。lParam指向一個COPYDATASTRUCT的結構:
typedef struct tagCOPYDATASTRUCT
{
DWORD dwData;//用戶定義數據
DWORD cbData;//數據大小
PVOID lpData;//指向數據的指針
}COPYDATASTRUCT;
該結構用來定義用戶數據。
有時候WM_COPYDATA收不到信息的問題:
1、SendMessage()函數中,wParam不能為空,有時候做測試時會出現,lParam可以為空;
2、低權限進程不能想高權限發送該消息,同時也包括其他許多消息也是如此。