写给我自己看的文章1

我想用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("剪贴板中没有数据或者不能打开剪贴板");
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值