请问如何记录一段鼠标操作和进行回放,
用钩子WH_JOURNALPLAYBACK 吗?不知道有没有相关的代码
我尝试总是失败

解决方案 »

  1.   

    如果你手上有MSDN,请阅读下面的文章:Tester Utility, Take 3: Adding Mouse Recording and Playback 
      

  2.   

    在线访问MSDN,请输入URLhttp://msdn.microsoft.com/msdnmag/issues/02/03/Bugslayer/default.aspx
      

  3.   

    DentistryDoctor(雅克医生<医德,值得反思>) 
    贴出的是可以的。该篇文章的作者John Robbins是最出名的windows调试专家,写了Windows应用程序调试等几本书,在随书的光盘中有很多有用的代码,其中包括你想要的记录键盘和鼠标操作而完成自动化测试的源代码。要想进一步了解John Robbins可以到他的网站http://www.wintellect.com/去看。该网站是几个人合办的,其中包括著名的《Windows核心编程》一书的作者Jeffrey Richter。
      

  4.   

    使用日志钩子可以记录,(这个是记录键盘,鼠标也一样)
    http://www.vccode.com/file_show.php?id=2465
      

  5.   

    谢谢指点,但现在还是有问题,继续请教,如何实现即时回放了?
    按照msdn上面的方法,我已经能够记录下来鼠标的操作,并且写到一个文本文件中,同时
    放在一个EVENTMSG数组中,但是回放的WH_JOURNALPLAYBACK钩子,始终不知道如何使用。
    msdn上面的,好像只有录制成js文件的,没有立刻回放的,
    不知道有没有人能介绍一下,哪方面说到回放我在网上找到一个vb的回放函数,按大概意识把它改写成vc,但不能够用,不知道问题在那
    顺便把代码贴出来问一下,event[]是一个全局的EVENTMSG数组,在纪录时用copymemoy()写入的
    LRESULT __declspec(dllexport) __stdcall HookProc_JournalPlayBack(int nCode ,unsigned int wParam,long lParam)
    {
        int canPlay = 1;
        int Result = 0;
    BOOL bDelay=true;
    int PlayLog=0;
    unsigned long lastTime=0;    if(nCode < 0 )//  'iCode小于0必须直接调用下一个消息钩子函数
    {
    Result=CallNextHookEx(g_hook, nCode, wParam, lParam);
    }
        else if(nCode == HC_SYSMODALON)// Then   '不允许回放
        {
    canPlay = 0;
    }
        else if(nCode == HC_SYSMODALOFF)// Then  '允许回放
        {
    canPlay = 1;
    }
        else if ((canPlay == 1)&&(nCode == HC_GETNEXT)) //Then
    {
            if(bDelay)// Then
    {
                bDelay = false;
                Result = event[PlayLog].time - lastTime;
    }
            //End If
            //'从纪录队列中取出消息并赋予lParam指针指向的EVENTMSG区域
            CopyMemory((void*)&lParam, &event[PlayLog], sizeof(lParam));
    }
        else if ((canPlay == 1) && (nCode == HC_SKIP))// Then
    {
            lastTime = event[PlayLog].time;
            bDelay = true;
            PlayLog = PlayLog + 1;
    }
    //End If
        
        if(PlayLog >= 1000)// Then
    {
            UnhookWindowsHookEx(g_hook);
        }  //  PlaybackProc = Result;
    return Result;
    }