在动态库的一函数中定义一参数HWND,在调用动库时传递客户程序窗口句柄,
在鼠标消息回调函数中使用 SendMessage(hwnd,WM_MYMOUSEMSG,当前鼠标的位置数据...)

解决方案 »

  1.   

    比较理想的做法是sendmessage + COPYDATA.
      

  2.   

    在DLL头文件中定义一个函数例如:__declspecl (dllexport) GetHwnd(HWND hWnd)
    此函数的作用是当客户程序调用动态连接库时可以向DLL中传送客户程序的窗口句柄。
    可以才客户程序中如下做:
    ..............//为调用动态连接库的代码
    GetHwnd(this->m_hWnd);
    在动态连接库的CPP文件中定义全局变量例如:HWND m_hWnd;
    在函数GetHwnd(HWND hWnd)中为m_hWnd附值
    GetHwnd(HWND hWnd)
    {
        m_hWnd = hWnd;
    }在键盘钩子的函数中如下:
    .....MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
       ...............
       if(m_hWnd)
       {
         msg.message = WM_LBUTTONDOWN;
         ::SendMessage(m_hWnd,msg.message,0,0);    
       }
    }在客户程序中加入
    ...PreTranslateMessage(MSG* pMsg)
    {
       if(pMsg->message == WM_LBUTTONDOWN)
       {
          point.x = pMsg->pt.x;
          point.y = pMsg->pt.y;//point为头文件中定义的POINT结构变量
        }

    我没测试,你可以试一下,如果不对可以稍微改动一下,这种方法是正确的。
      

  3.   

    to Leoparder(狩猎者):
    向dll传送exe的窗口句柄没有成功,主要是GetHwnd(this->m_hWnd);这句话没有通过,系统提示GetHwnd没有初始化(在客户程序中).
    我视图通过如下方式实现:
    typedef BOOL (*LpGetHwnd)(HWND hWnd);
    LpGetHwnd SendHwnd;
    if(hinstDLL=LoadLibrary((LPCTSTR)"mydll.dll"))
    {
    SendHwnd=(LpGetHwnd)GetProcAddress(hinstDLL,"GetHwnd"); 
    SendHwnd(this->m_hWnd);
             }
    系统出现非法操作.这应该如何解决???
    还有哪位大侠知道???绝对有分!!!!!!!