最近需要做个跟按键精灵类似的软件,模仿键盘鼠标的动作,然后重播一次,最开时候的时候用键盘钩子和鼠标钩子做的,虽然实现了功能,但是鼠标移动速度非常快,所以换成WH_JOURNALPLAYBACK 和WH_JOURNALRECORD 钩子来做

WH_JOURNALPLAYBACK 
使应用程序可以插入消息到系统消息队列。可以使用这个Hook回放通过使用WH_JOURNALRECORD Hook记录下来的连续的鼠标和键盘事件。只要WH_JOURNALPLAYBACK Hook已经安装,正常的鼠标和键盘事件就是无效的。
是全局Hook,它不能象线程特定Hook一样使用。 WH_JOURNALPLAYBACK Hook返回超时值,这个值告诉系统在处理来自回放Hook当前消息之前需要等待多长时间(毫秒)。这就使Hook可以控制实时事件的回放。
是system-wide local hooks,它们不会被注射到任何行程位址空间。

WH_JOURNALRECORD 
用来监视和记录输入事件。典型的,可以使用这个Hook记录连续的鼠标和键盘事件,然后通过使用WH_JOURNALPLAYBACK Hook来回放。

具体原理就是定义两个全局钩子 一个用来记录 一个用来回放 话不多说 看代码

void CKMHookDll::InstallHook(bool bIsKeyDown,bool bIsMouseDown,bool bIsMouseMove/*HWND hwnd*/)
{if (!m_pVecAction->empty()){m_pVecAction->clear();}m_bIsKeyDown = bIsKeyDown;m_bIsMouseDown = bIsMouseDown;m_bIsMouseMove = bIsMouseMove;m_hRecHook = SetWindowsHookEx(WH_JOURNALRECORD,(HOOKPROC)RecHook,m_hInst,0);
}

这段代码会开启WH_HOURANLRECORD钩子,会记录键盘 鼠标事件 我把它们保存在vector中,

钩子过程如下

LRESULT CALLBACK RecHook(int code,WPARAM wParam,LPARAM lParam)
{static int recOK = 1;if(code<0){return CallNextHookEx(CKMHookDll::GetInstance()->GetRecHook(),code,wParam,lParam);}else if(code==HC_SYSMODALON){recOK = 0;}else if(code==HC_SYSMODALOFF){recOK = 1;}else if(recOK && (code==HC_ACTION)){EVENTMSG action = *(EVENTMSG*)lParam;CKMHookDll::GetInstance()->AddEvent(action);}return 0;
}

每个键盘 鼠标事件都被保存在vector中,等待回放,开启回放的钩子代码如下

void CKMHookDll::RunScript()
{m_nPlayedEvent = 0;m_hPlayHook = SetWindowsHookEx(WH_JOURNALPLAYBACK,(HOOKPROC)PlayHook,m_hInst,0);
}

回调过程如下:

LRESULT CALLBACK PlayHook(int code,WPARAM wParam,LPARAM lParam)
{static BOOL fDelay;static int playOK = 1;if(code<0){return CallNextHookEx(CKMHookDll::GetInstance()->GetPlayHook(),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;}*((EVENTMSG*)lParam) = CKMHookDll::GetInstance()->GetVecAt(CKMHookDll::GetInstance()->GetPlayedEvent());}else if(playOK && (code==HC_SKIP)){fDelay = TRUE;CKMHookDll::GetInstance()->IncPlayedEvent();}if(CKMHookDll::GetInstance()->GetPlayedEvent()>=CKMHookDll::GetInstance()->GetVecSize()){UnhookWindowsHookEx(CKMHookDll::GetInstance()->GetPlayHook());}return 0;
}

整个工程下载:

http://download.csdn.net/detail/mrxiao95/9471394

C++用钩子模仿按键精灵录制键盘鼠标的功能相关推荐

  1. java写键盘鼠标录制器,易语言仿按键精灵录制键盘鼠标操作的代码

    DLL命令表 .版本 2 .DLL命令 取按键状态, 短整数型, "user32.dll", "GetAsyncKeyState" .参数 鼠标键, 整数型 . ...

  2. python实现按键精灵的功能_pyautogui简介_python中的按键精灵_键盘鼠标模拟

    以下翻译来自官司网说明网站 pyautogui.readthedocs.io pyautogui模块的目的是提供跨平台的自动化键盘鼠标操作.这个模块我们尽可能设计得容易使用.例如,下面的代码都会把鼠标 ...

  3. C# 实现按键精灵 记录录制键盘鼠标

    是一个非常实用的键盘鼠标脚本录制工具,通过它你可以轻松地进行脚本录制,简单易用,不需要任何编程知识就能做出功能强大的脚本,只要你在电脑前用双手可以完成的动作,都可以替你完成. 下载地址: 下载软件 特 ...

  4. 如何用按键精灵录制功能快速制作脚本

    简介: 按键精灵2014--简单游戏脚本免费制作开发工具,按键精灵论坛配有易学易懂的简单脚本开发教程,学习游戏脚本开发必备软件,教你怎么开发脚本,如何快速制作脚本.还有丰富的免费游戏脚本下载~ 工具/ ...

  5. 脚本录制软件python 按键精灵 tc_如何使用按键精灵录制脚本

    按键精灵可以代替我们手动完成很多重复的电脑工作,其实用按键精灵写脚本不难,对于新手来说,录制是最简单的,本经验介绍一下如何使用按键精灵录制脚本 工具/原料 按键精灵 方法/步骤 1 首先要安装按键精灵 ...

  6. python找色_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库

    Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色点击功能思路: 抓取当前屏幕快 ...

  7. python 找色点击_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库

    Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色点击功能思路: 抓取当前屏幕快 ...

  8. Python 模仿按键精灵,批量验证和添加手机号码为企业微信账号的联系人

    目录 需求 源码 运行 需求 批量验证和添加手机号码为企业微信账号的联系人 源码 import tkinter as tk import pyautogui as pg import tkinter. ...

  9. 按键精灵模拟键盘批量输入英文大小写

    可以直接看最后面的,前面的方法已经过期... 起因:闲来 无聊,公司开发的方式是虚拟云平台,所有工作都在云平台上完成,所以云平台外面的数据文档无法和云平台直接传送,如有需要,必须写申请单,向领导申请, ...

最新文章

  1. 分布式团队面临的五大问题及解决办法
  2. word 2010 从第三页开始设置页码
  3. esp8266 wifi信号强度设置
  4. 【机器学习基础】数学推导+纯Python实现机器学习算法3:k近邻
  5. MySQL笔记——DQL查询数据
  6. JDBC--Java Database Connectivity
  7. JeeWx 捷微 2.1 发布,微信管家平台
  8. Minimum Window Substring 最小覆盖子串算法
  9. URL请求到Action的映射规则
  10. 开发环境配置--Ubuntu+Qt4+OpenCV(二)
  11. Like Sunday, Like Rain - JavaScript运算符优先级
  12. ACL-IJCNLP 2021|行业首个少样本NER数据集,清华联合阿里达摩院开发
  13. php图书借阅管理系统前台,php图书馆图书借阅管理系统
  14. 【HEVC】CTU,CU,PU,TU的划分
  15. 廊坊金彩教育:如何提高店铺评分
  16. 关于扫码签到统计信息,一键导出excel表
  17. 10类职业人士最容易受到失眠困扰
  18. 实现两个主机之间的密钥分发和安全传输
  19. 摄像头的像素与分辨率之间的关系
  20. python跑一千万次循环要多久_进行一亿次MD5需要耗时多久?

热门文章

  1. linux下配置vim的教程,vim安装(vim配置教程)
  2. 3ds MAX次世代轮胎法线贴图制作教程
  3. python 图像卷积_[卷积神经网络(CNN)中的卷积核到底是如何提取图像特征的(python实现图像卷积运算)]...
  4. PVE虚拟机篇-pve软件换源
  5. 学会PDF转换器使用方法,再也不会熬夜整理PDF文件了
  6. 软件安全性能测试(转载)
  7. 重视ERP系统运行的潜在风险
  8. 最最完整的redis工具类(redis工具类,用这个就够了)
  9. 百度地图自定义工具栏
  10. 计算机收藏夹里面桌面不见了怎么办,win10系统电脑收藏夹不见了怎么办