我写了个小程序,可以记录鼠标点击坐标顺序,再按顺序及时间延时模拟点击记录.
在纯桌面上,可以运行很好.比如先打开我的电脑2秒后再打开回收站之类的.
但为什么点不进其他窗口里面.

解决方案 »

  1.   

    感谢回复,我用hook写的。
    但我觉得设置焦点也没用,因为我hook里把鼠标移动的坐标都显示在程序界面上,但当我鼠标进别窗口时,就无法显示鼠标坐标了。
      

  2.   

    或者难道我因该先把目标窗口激活,再启动hook??
      

  3.   

    从这个情况看"但当我鼠标进别窗口时,就无法显示鼠标坐标了" 是你的hook处理有问题吧?
      

  4.   

    SendInput需要先将指定的窗口设置到前台来,SetForegroundWindow();然后调用SendInput
      

  5.   


    _declspec(dllexport) LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    if(wParam==WM_MOUSEMOVE)   
    {   
    ff=(LPMOUSEHOOKSTRUCT)lParam;
    str.Format(("X=%d     Y=%d"),ff->pt.x,ff->pt.y);
    ::SetWindowText(ss,str);
    }   
    return 1;
    }只是非常简单的传递坐标,还需加什么吗?
      

  6.   

    我把问题简单点:我若把ie最大化,运行程序,鼠标移到窗口外,就没法显示坐标。只能在程序界面里显示坐标,是屏幕坐标。把ie最小化,在纯桌面上就能正常显示坐标。
      

  7.   

    你实现的因该是线程钩子,是这个钩子类型:WH_MOUSE 吧
    如果想在其他窗口中捕获鼠标位置,用全局钩子WH_MOUSE_LL、WH_JOURNALRECORD都可以
    你的回调函数不要总返回值1,这样的话窗口会不正常。
      

  8.   

    我改成LowLevelMouseProc还是没效果呀_declspec(dllexport) LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    if(wParam==WM_MOUSEMOVE)   
    {   
    rr= (LPMSLLHOOKSTRUCT)lParam;
    x=rr->pt.x;
    y=rr->pt.y; str.Format(("X=%d     Y=%d"),x,y);
    ::SetWindowText(ss,str);
    }   
    return 0;
    }
      

  9.   

    安装全局钩子 需要回调函数在dll中   SetWindowsHookEx(WH_MOUSE_LL,MouseProc,g_hIstance,0))
    不知你是怎么设置 
       static LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
    {
    MOUSEHOOKSTRUCT *pmht;
    TCHAR szBuf[128];

    if ( nCode <  0 )
    return CallNextHookEx(g_InstallHook,nCode,wParam,lParam);    if( nCode == HC_ACTION && g_MainWnd )   
        {   
    pmht = (MOUSEHOOKSTRUCT *)lParam; wsprintf(szBuf,"X=%d     Y=%d",pmht->pt.x,pmht->pt.y);
    ::SetWindowText(g_MainWnd,szBuf);
        }       return g_InstallHook ? CallNextHookEx(g_InstallHook,nCode,wParam,lParam) :0;
    }
      

  10.   

    恩 即使你全部调整正确了 有不少程序是屏蔽了SendInput这个消息的  建议直接用key_event可能会好些