原始碼如下:
//---------------------------------------------------------------------------
#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;
}
uj5u.com熱心網友回復:
我想讓它回放時比錄制的速度再快些。uj5u.com熱心網友回復:
這個是《delphi下深入windows核心編程》的原始碼吧。你再結合原始碼中 Windows NT2000變速齒輪 的例子試試。
uj5u.com熱心網友回復:
看了下,一模一樣,就是把delphi的原始碼轉成了c++,變數名都一樣
uj5u.com熱心網友回復:
sololie,麻煩您幫我看一下,DP我不懂,也沒原始碼。。。。uj5u.com熱心網友回復:
if (bDelay){
bDelay=false;
Result=50; //這個就能控制回發速度,負數越大越快,反之越慢
}
uj5u.com熱心網友回復:
-1,0, 5, 50, 80在這幾個值間自己試試
我試了下,好像速度不能控制得很精確,可以很快,或正常速度,和很慢很慢慢慢慢慢
uj5u.com熱心網友回復:
我早上也試了,答案跟你的是一樣的,沒有別的辦法了嗎?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/140544.html
標籤:基礎類
上一篇:看懂一個Class檔案
下一篇:急求!!!SUIPack.bpi
