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

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;
}
...全文
173 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
我想让它回放时比录制的速度再快些。
回复
相关推荐
发帖
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2013-06-07 05:07
社区公告
暂无公告