WM_COPYDATA
The WM_COPYDATA message is sent when an application passes data to another application. WM_COPYDATA 
wParam = (WPARAM) (HWND) hwnd;            // handle of sending window 
lParam = (LPARAM) (PCOPYDATASTRUCT) pcds; // pointer to structure with data 
 
Parameters
hwnd 
Handle to the window passing the data. 
pcds 
Pointer to a COPYDATASTRUCT structure that contains the data to be passed. 
Return Values
If the receiving application processes this message, it should return TRUE; otherwise, it should return FALSE. 
MSDN上是这样说的,如果成功SendMessage应该返回TRUE,否则返回FALSE;可是我在实际测试,无论成功与否返回都是0 ,为什么呢?

解决方案 »

  1.   

    我曾经用过WM_COPYDATA,但是没有判断SendMessage()的返回值
      

  2.   

    If the receiving application processes this message, it should return TRUE; otherwise, it should return FALSE. 我觉得这句话并没有说成功与否,它是说,如果接受进程处理了这个消息,它(接受进程)应该返回TRUE;否则,它(接受进程)应该返回FALSE.我试验的结果就是接受进程返回TRUE,SendMessage就返回TRUE,否则接受进程返回FALSE,它就返回FALSE.
    我还试了一下,我的接受进程返回3,SendMessage也返回3.
    你看看是不是这样你的名字也很有意思,忍无可忍,哈哈,则无须在忍
      

  3.   

    to dawndu(东南飞) :你好!你说的“接受进程返回TRUE”是不是指接受进程的消息响应函数呢?我原来是这样定义的:VOID __fastcall TFrm::OnCopyData(TMessage Msg);
    现在改成了:BOOL __fastcall TFrm::OnCopyData(TMessage Msg)
    接收到数据后,返回TRUE;但是发送端的SendMessage还是返回0,你用vc试的?难道vc和cb有这么大区别?
      

  4.   

    我的确是用的vc,但是我在写的接受程序的时候我用的是sdk的方式写的,发送就调的api,这个跟用什么编译器应该没有什么关系,就是有影响也是vcl封装的原因。我对Delphi还懂一点,cb是从来就没有用过。我觉得要真的是这样,那就是vcl库有一些别的处理(这个情况应该很少)或你定义的响应函数的有一些问题。MFC处理是比较接近SDK那种的,建议你用在cb中以sdk的方式试一下。
    switch(message)
    {
    case WM_CREATE:
       ....
      break;
     case WM_COPYDATA:
      a=0;//断点
     return 4;
    }
      

  5.   

    哦,这样啊我return的是true但vcl的那个窗口过程返回什么我就不清除了.非常感谢你的帮助!