WM_COPYDATA消息,现写一个小例,以做备忘:
现有两个程序A和B,A做为发送数据方,B做为接收数据方。
A(发送端)程序中的程序片段如下:
HWND hwnd = ::FindWindow(NULL, _T("B"));
if (NULL == hwnd)
{
MessageBox(NULL, _T("没有找到程序B"), _T("提示"), NULL);
}
char *buf = new char[10];
memset(buf, 0, 10);
sprintf_s(buf, 10, "%s", "Hello");
COPYDATASTRUCT cds;
ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
cds.dwData = 0;
cds.cbData = 10;
cds.lpData = (PVOID)buf;
::SendMessage(hwnd, // hwnd为接收消息的目标窗口句柄
WM_COPYDATA,
NULL/*(WPARAM)hWnd*/,//可以是NULL或者发送消息的窗口句柄
(LPARAM)&cds);//COPYDATASTRUCT结构体指针
delete []buf;
B(接收端)程序片段如下:
case WM_COPYDATA:
{
MessageBox(NULL, _T("B程序收到消息 WM_COPYDATA"), _T("提示"), NULL);
COPYDATASTRUCT *pcds = (COPYDATASTRUCT *)lParam;
printf("pcds->cbData is :%d\n", pcds->cbData);
printf("pcds->lpData is :%s\n", (char *)pcds->lpData);
}