Windows进程间通讯(IPC)----WM_COPYDATA

WM_COPYDATA通讯思路

通过向其他进程的窗口过程发送WM_COPYDATA消息可以实现进程间通讯。

只能通过SendMessage发送WM_COPYDATA消息,而不能通过PostMessage发送WM_COPYDATA消息。因为系统必须管理用以传递数据的缓冲区的生命期,如果使用了PostMessage(),数据缓冲区会在接收方(线程)有机会处理该数据之前,就被系统清除和回收。所以应该使用SendMessage,这样就能在接收方处理数据之前使发送方处于阻塞状态,发送数据的缓冲区不会被清除或释放。

SendMessage(hWnd,            //目标进程窗口句柄
WM_COPYDATA,
WPARAM, //发送进程的窗口句柄(GetConsoleWindow()可以获得当前控制台窗口句柄)
LPARAM) //指向一个COPYDATASTRUCT结构

利用COPYDATASTRUCT结构传送需要通讯的信息,接收方通过处理WM_COPYDATA消息来获得此结构。

typedef struct tagCOPYDATASTRUCT {
ULONG_PTR dwData;
DWORD cbData;//数据长度
PVOID lpData;//存放通信数据的内存的地址
} COPYDATASTRUCT, *PCOPYDATASTRUCT;

WM_COPYDATA原理

WM_COPYDATA原理是通过回调函数KeUserModeCallback来调用接收方的窗口过程

上一篇:.Net下的进程间的通讯 -- Windows消息队列


下一篇:Windows进程间通讯(IPC)----共享内存