我想要统计鼠标从本次开始移动到停止移动所经历的时间。
现在已经挂上了低级鼠标钩子,我以为处理WM_MOUSEMOVE消息中的lParam中的time能够解决这个问题,不过WM_MouseMove消息的精度似乎有点问题,那个time也比较怪异,各位有没有好一点的办法?

解决方案 »

  1.   

    建议lz取一个比较值,比如100ms,先计时,每隔100ms获取一次鼠标的位置,如果没变就当作已经停下来了,然后停止计时,然后输出。。这样行不?
      

  2.   

    我的办法是收到一次move消息后把此时的系统时间点放到一个变量中,下次收到move消息后判断一下是不是曾经受到过,如果收到就减去前面的时间点,这个方法还能凑合着工作:case WM_MOUSEMOVE:
    if(!MoveFlag)
    {
    MoveTimeTemp = pStruct->time;//保存第一次的时间点
    MoveFlag = TRUE;
    SetTimer(MainWnd,ID_TIMER_MOVE,1000,NULL);
    }
    else
    {
    MoveTime += (pStruct->time - MoveTimeTemp);
    MoveFlag = FALSE;
    KillTimer(MainWnd,ID_TIMER_MOVE);//关闭由于单数个move消息进入而导致的误差计时器
    }