我想用BroadcastSystemMessage来在两个进程之间通讯,我从一个进程发送了一个
用 RegisterWindowMessage注册过的消息,但在目的进程中却没有收到该消息.
A:我认为你应该在两个进程的最高级窗口中都注册该消息.请看下例:
static UINT sBroadcastCommand = ::RegisterWindowMessage( _T("消息值"));
BEGIN_MESSAGE_MAP( Gui_Top_Level_MainFrame, Gui_MainFrame )
ON_REGISTERED_MESSAGE( sBroadcastCommand, onBroadcastCommand )
END_MESSAGE_MAP()
LRESULT Gui_MainFrame :: onBroadcastCommand( UINT aMsg, LPARAM lParam )
{
your code...
}
然后发送进行应该包含:
While the sending process would contain:
static UINT sBroadcastCommand = ::RegisterWindowMessage( _T("消息值"));
void Someclass :: someMethod( void )
{
::PostMessage( (HWND)HWND_BROADCAST,sBroadcastCommand, 参数1 ,参数2 );
}
同理,sendMessage也一样用哦
这是问题的关键所在,我给出一个用剪贴板解决问题的思路,供你参考:
1 第一个程序把数据放到剪贴板
MyData *pData;
HGLOBAL hMem;
pData = new MyData("发送数据");
hMem = GlobalAlloc(GHND,sizeof(MyData));
memcpy(GlobalLock(hMem),(void *)pData,sizeof(MyData));
if (OpenClipboard())
{
SetClipboardData(RegisterClipboardFormat("MyData"),hMem);
GlobalUnlock(hMem);
CloseClipboard();
}
2 给第二个程序发送消息,不要任何参数
3 第二个程序收到消息后从剪贴板取得数据
MyData *pData;
HGLOBAL hMem;
pData = new MyData();
if (IsClipboardFormatAvailable(RegisterClipboardFormat("MyData")) && OpenClipboard())
{
hMem = GetClipboardData(RegisterClipboardFormat("MyData"));
memcpy(pData,GlobalLock(hMem),sizeof(MyData));
GlobalUnlock(hMem);//或者用 EmptyClipboard();释放内存
CloseClipboard();
MessageBox(pData->GetString());
}
else
MessageBox("剪贴板中没有数据或者不能打开剪贴板");