📄 按键精灵.txt
字号:
//----------------------------------------------------------------
// 利用钩子实现全系统重复
//
//
LRESULT CALLBACK RecHook(int code,WPARAM wParam,LPARAM lParam);
LRESULT CALLBACK PlayHook(int code,WPARAM wParam,LPARAM lParam);
HHOOK recHook,playHook;
EVENTMSG EventArray[1000];
int recordedEvent=0;
int playedEvent=0;
//以上是定义钩子和回掉函数
//---------------------------------------------------------------------
//以下分别为3个按钮 OnFunctionStart() 开始记录
// OnFunctionStop() 停止记录
// OnFunctionReplay() 回放记录
//
void 阿龙软件::OnFunctionStart()
{
// TODO: Add your command handler code here
recordedEvent=0;
recHook=SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)RecHook,(HINSTANCE)AfxGetApp()->m_hInstance,0);
}
void 阿龙软件::OnFunctionStop()
{
// TODO: Add your command handler code here
UnhookWindowsHookEx(recHook);
}
void 阿龙软件::OnFunctionReplay()
{
// TODO: Add your command handler code here
playedEvent=0;
playHook=SetWindowsHookEx(WH_JOURNALPLAYBACK,(HOOKPROC)PlayHook,(HINSTANCE)AfxGetApp()->m_hInstance,0);
}
//以下为回调函数,用来处理记录和回放的功能
LRESULT CALLBACK RecHook(int code,WPARAM wParam,LPARAM lParam)
{
static int recOK=1;
if(code<0)
return CallNextHookEx(recHook,code,wParam,lParam);
else if(code==HC_SYSMODALON)
recOK=0;
else if(code==HC_SYSMODALOFF)
recOK=1;
else if(recOK && (code==HC_ACTION))
{
EventArray[recordedEvent]= *((PEVENTMSG)lParam);
recordedEvent++;
if(recordedEvent==1000)
{
UnhookWindowsHookEx(recHook);
}
}
return 0;
}
LRESULT CALLBACK PlayHook(int code,WPARAM wParam,LPARAM lParam)
{
static BOOL fDelay;
static int playOK=1;
if(code<0)
return CallNextHookEx(playHook,code,wParam,lParam);
else if(code==HC_SYSMODALON)
playOK=0;
else if(code==HC_SYSMODALOFF)
{
playOK=1;
}
else if(playOK && (code==HC_GETNEXT))
{
if(fDelay)
{
fDelay=FALSE;
return 50;
}
*((PEVENTMSG)lParam)=EventArray[playedEvent];
}
else if(playOK && (code==HC_SKIP))
{
fDelay=TRUE;
playedEvent++;
}
if(playedEvent>=recordedEvent)
{
UnhookWindowsHookEx(playHook);
}
return 0;
}
//结束
注:以上程序代码可以模拟鼠标和键盘的等全部的功能.可以做成dll.动态调用效果更佳.
如果有什么地方不明白可以回帖说明.
//
其实你也可以使用mouse_event函数。以下给出简单代码,用来模拟鼠标单击10次:
void CMyDlg::OnButton1()
{
//SetCursorPos(560,0); //鼠标移动到屏幕的560,0位置
for(int i=0;i<10;i++)
{
//以下是鼠标左键单击一次
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
//Sleep(200);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -