WM_COPYDATA   WM_COPYDATA消息主要目的是允许在进程间传递只读数据。SDK文档推荐用户使用SendMessage函数,接受方在数据拷贝完成前不返回,这样发送方就不可能删除和修改数据: SendMessage(hwnd,WM_COPYDATA,wParam,lParam); 
其中wParam设置为包含数据的窗口的句柄。lParam指向一个COPYDATASTRUCT的结构: 
typedef struct tagCOPYDATASTRUCT{ 
             DWORD dwData;       //用户定义数据 
            DWORD cbData;        //数据大小 
            PVOID lpData;           //指向数据的指针 
       }COPYDATASTRUCT; 
这段代码所说的设置句柄 是怎么设置啊
另外 该函数的参数好像是窗口句柄吧,我想给程序发消息int,然后在该程序界面上显示数字,到底是该给窗口还是给程序发
上面的设置什么的我不明白

解决方案 »

  1.   

    这段代码所说的设置句柄 是怎么设置啊
    另外 该函数的参数好像是窗口句柄吧,我想给程序发消息int,然后在该程序界面上显示数字,到底是该给窗口还是给程序发
    上面的设置什么的我不明白
    ==============
    这里的四个参数分别是:hwnd应该是对方的窗口,也就是接收方的窗口,wParam是发送方的窗口,也就是你用SendMessage发送时所在的窗口。
    你发WM_COPYDATA当然是发送给对方程序的窗口了。
      

  2.   

    顺便说一句,只发一个int的话,就没必要兴师动众地动用WM_COPYDATA了吧。
      

  3.   

    因为Windows OS是以消息机制为主的,而窗口是接收消息的单元,一般来说这个句柄是说窗口句柄。
    就是说你消息是发到哪个窗口,哪个窗口的消息函数可以处理这个消息的意思(以上我说的比较白,希望lz能明白。)
      

  4.   

    MSDN上不是有说明吗,而且还有例子程序
    To send this message, call the SendMessage function as follows. 
    lResult = SendMessage(      // returns LRESULT in lResult     (HWND) hWndControl,      // handle to destination control     (UINT) WM_COPYDATA,      // message ID     (WPARAM) wParam,      // = (WPARAM) () wParam;    (LPARAM) lParam      // = (LPARAM) () lParam; );   
    ParameterswParam
    Handle to the window passing the data. 
    lParam
    Pointer to a COPYDATASTRUCT structure that contains the data to be passed. 
      

  5.   

    哪有程序接收消息的?只有窗口才能接收。一般我们说的给哪个程序发消息,实际上指的是给那个程序的主窗口发消息。只不过大家都知道是什么意思,所以很多人说给程序发消息。
    CopyData消息是解决消息在不同进程间传递数据的。但如果数据只有4个字节(32位系统上),也就是sizeof(int)那么大, 任何一个消息都可以传递的,只有大于4字节的,才需要动用Copy data消息。
      

  6.   

    也有不给窗口发消息的,如果对方没有窗口的话,用PostThreadMessage向对方线程发消息也可以。
      

  7.   

    怎么得到对方 窗口或者线程
    ==============
    窗口句柄最通用的方法是用FindWindow获得。
      

  8.   

    我的需求是发 int 数据 能贴点代码吗 求了
      

  9.   

    int数据最多不过32位而已,最简单了,
    int i;
    i=8;
    COPYDATASTRUCT cs;
    cs.cbData = sizeof(i);//发送数据cs.lpData的大小
    cs.dwData = 0;  //现在没有使用
    cs.lpData = &i;  //
    SendMessage(hWnd,WM_COPYDATA,,(WPARAM)GetSafeHwnd(),(LPARAM)&cs);
      

  10.   

    COPYDATASTRUCT 是啥子类型啊
      

  11.   

    COPYDATASTRUCT 是啥子类型啊
    =============
    就是COPYDATASTRUCT类型啊,COPYDATASTRUCT就是类型名啊,具体的定义你去看MSDN。
      

  12.   

    如果只发int.那么这样:::SendMessage(窗口句柄,WM_USER+100, int值, 0);
    当然
    ::SendMessage(窗口句柄,WM_USER+100, 0,int值);
    也是可以的。也就是你用WPARAM还是LPARAM传int,都是一样的。WM_USER+100是自定义消息,你随便定义:
    #define WM_SEND_INT WM_USER+100
      

  13.   

    WM_USER
    Used to define private messages for use by private window classes, usually of the form WM_USER+X, where X is an integer value.