进程中利用WM_COPYDATA通信遇到的问题?
我在一个进程中,利用
hwDispatch = FindWindow( "Disp32Class ", "Hidden Window " );
if( hwDispatch != NULL )
SendMessage( hwDispatch,
WM_COPYDATA,
NULL,
(LPARAM) (LPVOID) &MyCDS );
发送一个消息到另外一个进程。
另外一个进程是这样的(不是基本Dialog的):
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
g_hwnd = NULL;
// 执行应用程序初始化:
if (!InitInstance(hInstance, nCmdShow))
{
return FALSE;
}
HACCEL hAccelTable;
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MAILCLIENT));
PushmailMsgpacket msgPacket;
memset(&msgPacket, 0, sizeof(PushmailMsgpacket));
// 主消息循环:
//while (GetMessage(&msg, NULL, 0, 0))
while (1)
{
//获取短信解析模块传递的消息
PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
if (msg.message == NULL)
{
continue;
}
if (msg.message == WM_COPYDATA)
{
pMyCDS = (PCOPYDATASTRUCT)msg.lParam;
PushmailMsgpacket * ppm = (PushmailMsgpacket*)pMyCDS-> lpData;
memcpy((void *)&msgPacket, (void *)ppm, sizeof(PushmailMsgpacket));
break;
}
/*if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}*/
}
}
在这个里面,我用getmessage的时候,无法获取消息,利用peekmessage还是无法获取,请问在这种情况下,我如何才能另外的进程获取消息呢?谢谢
[解决办法]
将
PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
改为
PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
应该就可以了,这是典型的无窗口的消息列产生方法。