笑够了吧不够还加.......
小弟我写了一个鼠标钩子函数,但是当鼠移出对话框以外时就没反应了,大定给我想想问题出在哪里,谁有这方面的电子书或资料也请贴上来或发给我,多谢.
[email protected]
分不够再加.

解决方案 »

  1.   

    http://www.vckbase.com/document/listdoc.asp?mclsid=13&sclsid=1309
    http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1309
      

  2.   

    不会吧,钩子不是钩系统的吗?和你的对话框有什么关系?
    哎......世事总难料我把部分代码写一下.劳烦各位帮我看看:
    void CMouseHookDlg::OnCancel() 
    {
    DlgHwnd=DlgHwndInCMouseHookDlg; //设置标钩子
    MouseHook=::SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle(NULL),0);}
    //鼠标钩子回调函数
    LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    if(wParam != WM_MOUSEMOVE) //只处理鼠标移动信息
    return (::CallNextHookEx(MouseHook,nCode,wParam,lParam));

    MOUSEHOOKSTRUCT* MouseHookStruct; //定义鼠标钩子结构
    CPoint  MousePoint;//定义鼠标位置结构
    char MousePoint_x[10],MousePoint_y[10];//定义鼠标位置数组

    MouseHookStruct  = (MOUSEHOOKSTRUCT*)lParam; //获取鼠标消息

    MousePoint.x     = MouseHookStruct->pt.x; //获取鼠标位置
    MousePoint.y     = MouseHookStruct->pt.y; _ltoa(MousePoint.x ,MousePoint_x,10); //把鼠标位置转换为字符串
    _ltoa(MousePoint.y ,MousePoint_y,10); char MousePointXY[20]; //合并两个字符串到一个字符串中
    int  i;
    for( i=0; i<10;i++)
    MousePointXY[i]=MousePoint_x[i];
    for( i=10;i<20;i++)
    MousePointXY[i]=MousePoint_y[i-10]; HWND HwndEdit; //获取对话框中EDIT控件的句柄,
    HwndEdit=::GetDlgItem (DlgHwnd ,1000);//DlgHwnd为对话框的句柄 //发送鼠标位置字符串到对话框中的EDIT控件中
    ::SendMessage (HwndEdit,WM_SETTEXT,0,(LPARAM)MousePointXY); //返回
    return (::CallNextHookEx (MouseHook,nCode,wParam,lParam));}
      

  3.   

    OnCancel函数就是开始鼠标钩子的函数
      

  4.   

    你看一下msdn我记得SetWindowsHookEx函数最后一个参数是设置该钩子是否为系统钩,还是窗口钩的,不妨试一下MouseHook=::SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle(NULL),1);
      

  5.   

    SetWindowsHookEx函数最后一个参数是0为系统钩子~
    try~
    把你的代码贴出来~
      

  6.   


    //鼠标钩子回调函数
    LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
    {
    if(wParam != WM_MOUSEMOVE) //只处理鼠标移动信息
    return (::CallNextHookEx (MouseHook,nCode,wParam,lParam));

    MOUSEHOOKSTRUCT* MouseHookStruct; //定义鼠标钩子结构
    CPoint  MousePoint; //定义鼠标位置结构
    char  MousePoint_x[10],MousePoint_y[10]; //定义鼠标位置数组

    MouseHookStruct  = (MOUSEHOOKSTRUCT*)lParam; //获取鼠标消息

    MousePoint.x     = MouseHookStruct->pt.x; //获取鼠标位置
    MousePoint.y     = MouseHookStruct->pt.y; _ltoa(MousePoint.x ,MousePoint_x,10); //把鼠标位置转换为字符串
    _ltoa(MousePoint.y ,MousePoint_y,10); char MousePointXY[20]; //合并两个字符串到一个字符串中
    int  i;
    for( i=0; i<10;i++)
    MousePointXY[i]=MousePoint_x[i];
    for( i=10;i<20;i++)
    MousePointXY[i]=MousePoint_y[i-10]; HWND HwndEdit; //获取对话框中EDIT控件的句柄,
    HwndEdit=::GetDlgItem (DlgHwnd ,1000); //DlgHwnd为对话框的句柄 //发送鼠标位置字符串到对话框中的EDIT控件中
    ::SendMessage (HwndEdit,WM_SETTEXT,0,(LPARAM)MousePointXY); //返回
    return (::CallNextHookEx (MouseHook,nCode,wParam,lParam));}//开始鼠标钩子函数
    void CMouseHookDlg::OnCancel() 
    {
    DlgHwnd=DlgHwndInCMouseHookDlg; //设置标钩子
    MouseHook=::SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle(NULL),0);}//关闭鼠标钩子函数
    CMouseHookDlg::~CMouseHookDlg()
    {
    //关闭鼠标钩子
    if(MouseHook != NULL)
    ::UnhookWindowsHookEx (MouseHook);
    }
      

  7.   

    哥,你好象return (::CallNextHookEx (MouseHook,nCode,wParam,lParam));
    两次啊,我感觉一次就行了,实在不行你去找本windows核心编程抄抄吧。
      

  8.   

    你没有把钩子做在dll里面吧?
    钩子不在dll里面一般都会有这样的问题
      

  9.   

    //开始鼠标钩子函数
    void CMouseHookDlg::OnCancel() 
    {
    DlgHwnd=DlgHwndInCMouseHookDlg; //设置标钩子
    MouseHook=::SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle(NULL),0);}
    ????????
    不太对阿~
    应该在OnInitDialog里开始吧~