请问各位大侠,键盘鼠标动作纪录与回放 ,如何控制回放速度呢?

wyxxxxx 2013-06-07 05:07:18
源码如下:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
const MaxEventCount=1000 ;
EVENTMSG EventArr[MaxEventCount] ;
int EventLog,PlayLog,recOK,canPlay;
HHOOK hHook,hPlay;
bool bDelay;
//---------------------------------------------------------------------------
LRESULT __stdcall PlayProc(int iCode,WPARAM wParam, LPARAM lParam)
{
LRESULT Result=0;
canPlay=1;
if (iCode<0)
Result=CallNextHookEx(hPlay,iCode,wParam,lParam);
else if (iCode==HC_SYSMODALOFF)
canPlay=1;
else if (canPlay==1 && iCode==HC_GETNEXT)
{
if (bDelay)
{
bDelay=false;
Result=50; //
}
*((PEventMsg)lParam)=EventArr[PlayLog]; // pEventMsg(lParam)^:=EventArr[PlayLog];
}
else if (canPlay==1 && iCode==HC_SKIP)
{
bDelay=True;
PlayLog++;
}
if (PlayLog>=EventLog)
UnhookWindowsHookEx(hPlay);
return Result;
}
//---------------------------------------------------------------------------
LRESULT __stdcall HookProc(int iCode,WPARAM wParam, LPARAM lParam)
{
LRESULT Result=0;
recOK=1;
if (iCode<0)
Result=CallNextHookEx(hHook,iCode,wParam,lParam);
else if (iCode==HC_SYSMODALON)
recOK=0;
else if (iCode==HC_SYSMODALOFF)
recOK=1;
else if(recOK>0 && iCode==HC_ACTION)
{
EventArr[EventLog++]=*((PEventMsg)lParam); //EventArr[EventLog++]:=pEventMSG(lParam)^;
if (EventLog>=MaxEventCount)
UnhookWindowsHookEx(hHook);
}
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------
//录制
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//建立键盘鼠标操作消息纪录链
EventLog=0;
hHook=SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)HookProc,HInstance,0);
Button2->Enabled=true;
Button3->Enabled=false;
}
//---------------------------------------------------------------------------
//暂停
void __fastcall TForm1::Button2Click(TObject *Sender)
{
UnhookWindowsHookEx(hHook);
hHook=NULL;
Button1->Enabled=true;
Button2->Enabled=false;
Button3->Enabled=true;
}
//---------------------------------------------------------------------------
//回放
void __fastcall TForm1::Button3Click(TObject *Sender)
{
//建立键盘鼠标操作消息纪录回放链
PlayLog=0;
hPlay=SetWindowsHookEx(WH_JOURNALPLAYBACK,(HOOKPROC)PlayProc,HInstance,0);
Button3->Enabled=false;
}
...全文
226 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyxxxxx 2013-06-07
  • 打赏
  • 举报
回复
我早上也试了,答案跟你的是一样的,没有别的办法了吗?
sololie 2013-06-07
  • 打赏
  • 举报
回复
-1,0, 5, 50, 80 在这几个值间自己试试 我试了下,好像速度不能控制得很精确,可以很快,或正常速度,和很慢很慢慢慢慢慢
sololie 2013-06-07
  • 打赏
  • 举报
回复
if (bDelay) { bDelay=false; Result=50; //这个就能控制回发速度,负数越大越快,反之越慢 }
wyxxxxx 2013-06-07
  • 打赏
  • 举报
回复
sololie,麻烦您帮我看一下,DP我不懂,也没源码。。。。
sololie 2013-06-07
  • 打赏
  • 举报
回复
看了下,一模一样,就是把delphi的源码转成了c++,变量名都一样
sololie 2013-06-07
  • 打赏
  • 举报
回复
这个是《delphi下深入windows核心编程》的源码吧。 你再结合源码中 Windows NT2000变速齿轮 的例子试试。
wyxxxxx 2013-06-07
  • 打赏
  • 举报
回复
我想让它回放时比录制的速度再快些。

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧