C++ 实现按键精灵

文章目录

  • C++ 实现按键精灵
    • 1.keybd_event 实现
      • 1.1 函数说明
      • 1.2 关于扫描码的补充说明
      • 1.3 示例代码
    • 2.SendMessage 实现
    • 2.1 函数说明
    • 2.2 示例代码
    • 2.3查找句柄

最近玩游戏需要用到按键精灵,Google 结果一堆不安全链接,担心有风险,索性就自己找资料写。

本文主要介绍两个函数 keybd_event 和 SendMessage ;两者都可以实现按键功能,SendMessage 的优势是支持后台。

1.keybd_event 实现

参考 https://blog.csdn.net/yizhou2010/article/details/6178115
参考 https://zhidao.baidu.com/question/579000692.html
参考 https://blog.csdn.net/lhrsdl/article/details/52579286

1.1 函数说明

keybd_event 是 windows 提供的模拟键盘 API 函数,使用该函数可以触发相应的键盘动作。

Keybd_event()函数能触发一个按键事件,也就是说会产生一个 WM_KEYDOWN 或 WM_KEYUP 消息。

函数原型如下:

void keybd_event(BYTE bVk, // virtual-key codeBYTE bScan, // hardware scan codeDWORD dwFlags, // flags specifying various function optionsDWORD dwExtraInfo // additional data associated with keystroke);

-参数 1 为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab(其他具体的参见附录:常用模拟键的键值对照表);

-参数 2 为扫描码,一般不用设置,用0代替就行;

-参数 3 为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP";

-参数 4 一般也是置0即可。

1.2 关于扫描码的补充说明

如果扫描码设置为 0 ,那么 keybd_event 在游戏中是失效的。

keybd_event 的本质是传递一个与 OEM 相关的硬件扫描码给系统,系统再将扫描码转换成虚拟键码,并模拟按键信号。关键就在 虚拟键码 上,它只是向操作系统发送按键码而已,实际硬件上并没有这个信号。

因此,游戏程序只需要判断这个按键信号是否来自于硬件,就能屏蔽我们的虚拟按键。解决方法也很简单,将扫描码由 0 替换为按键对应的扫描码即可。

虚拟键值表和扫描码表,搜索下很容易找到,这里放一张常用键值对照表。

1.3 示例代码

#include<iostream>
#include<windows.h>using namespace std;int main()
{cout << "请把光标移动到输入框" << endl;Sleep(2000);mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//模拟单击鼠标左键 for (;;){//字母 A 按下keybd_event(65, 0x1E, 0, 0);keybd_event(65, 0x1E, KEYEVENTF_KEYUP, 0);Sleep(100);//字母 S 按下keybd_event(83, 0x1F, 0, 0);keybd_event(83, 0x1F, KEYEVENTF_KEYUP, 0);Sleep(100);//system("cls");//清屏 }return 0;
}

如果不能正常运行,可以试试以管理员身份运行。

2.SendMessage 实现

参考 https://www.cnblogs.com/wind-net/archive/2012/11/01/2750123.html
参考 https://blog.csdn.net/u011296732/article/details/51668937
参考 https://blog.csdn.net/u014038534/article/details/47298665

2.1 函数说明

Windows是一个消息驱动式系统,SendMessage 是应用程序和应用程序之间进行消息传递的主要手段之一。

LRESULT SendMessage(      HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam
);

参数1:hWnd-窗口句柄。窗口可以是任何类型的屏幕对象。

参数2:Msg-用于区别其他消息的常量值.

参数3:wParam-通常是一个与消息有关的常量值,也可能是窗口或控件的句柄.

参数4:lParam-通常是一个指向内存中数据的指针。

通过改变 Msg 可以实现不同的功能,比如创建窗口、移动窗口、改变窗口大小等等……
这里只展示操作按键的代码。

2.2 示例代码

#include <Windows.h>
#include <stdio.h>
#include <string.h>
#include<iostream>using namespace std;int main()
{LPCWSTR  lpszCreate = TEXT("QQ三国1.0Beta78Build41 一代枭雄 1线"); HWND hq = FindWindow(NULL, lpszCreate); //寻找句柄if (hq == NULL){printf("Find windod fail !\n");}for (;;){printf("程序执行中……\n");SendMessage(hq, WM_KEYDOWN, 'A', 0);Sleep(100);SendMessage(hq, WM_KEYDOWN, 'S', 0);Sleep(100);SendMessage(hq, WM_KEYDOWN, 'D', 0);}return 0;
}

2.3查找句柄

SendMessage 在使用之前需要先获取窗口的句柄,这里介绍一下使用 visual stduio 的 spy 工具先来获取窗口标题,在寻找句柄的方法。

打开 visual stduio -> 工具 -> spy++ -> 搜索-> 查找窗口。

拖动红框内的标志到你要操作的窗口的标题栏上,spy 工具便能自动获取标题。

C++ 实现按键精灵——keybd_event和SendMessage相关推荐

  1. VB模拟出的按键精灵大部分功能

    原贴:[原创帖]VB模拟出的按键精灵大部分功能 http://www.52pojie.cn/thread-46719-1-1.html (出处: 吾爱破解论坛) 模块部分:   Private Dec ...

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

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

  3. python 按键精灵 离线_(番外篇)Python操纵网盘客户端批量离线下载电影

    上回(Python实现电影排行榜自动网盘下载(4)Cookies免登录+抓包下载)说到,一段时间内能进行多少次离线下载还是受限于验证码的输入. 在此有两个解决方案, 见招拆招 通过GUI优化验证码输入 ...

  4. python图色模拟脚本_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库

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

  5. 利用Python和win32编程范例——按需定制一个按键精灵

    转自:作者 橘子一方 http://www.orangecube.net/articles/python-win32-example.html 利用Python和win32编程范例--按需定制一个按键 ...

  6. RF自动化--python模拟按键精灵

    #Python下在windows系统下仿照按键精灵 功能:找到对应软件程序,并对界面进行操作,主要进行点击.信息输入.输出信息得检测 ##所用到得库 库名 作用 win32gui gui调用 win3 ...

  7. 按键精灵开发者认证1-6题库

    这是以前整理的题库,包过. 题目:(前台)区域范围为(100,150)到(200,300)内的所有点是否均为"FFFFFF",是则弹出对话框"没有其他颜色",否 ...

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

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

  9. android x86 按键精灵,界面版按键精灵的使用【包含内置浏览器、打开程序的方法】...

    包含界面的脚本.....................................................自己拖拽包,根据这里的控件名命名,然后自己拖拽 '打开九阴真经 Event Fo ...

最新文章

  1. Vulkan Tutorial 12 Fixed functions
  2. MPB:林科院袁志林组-​枫香-真菌互作培养体系构建
  3. java调用cd传输_Java调用Linux命令(cd的处理)
  4. 使用HtmlGenericControl控件动态产生一些HtmlControls
  5. 2021-02-25 matlab 字符串和数字同时写入excel
  6. 【C语言进阶深度学习记录】二十一 # 和 ## 号操作符的使用与分析
  7. 2018年的AI/ML惊喜及预测19年的走势(二)
  8. ipython文件每次打开重新运行吗_iPython中的多处理:当我不打开任何文件时打开的文件太多?...
  9. 重排列得到2的幂(51Nod-2515)
  10. SSLOJ 1298.网站计划
  11. 调度指挥系统解决方案
  12. 2019蓝桥杯决赛Java_2019年蓝桥杯省赛总结
  13. Unity商店插件/工具收藏篇
  14. Python turtle画图之心形图案
  15. ubuntu搭建PHP网站完整实例教程
  16. 计世资讯:用户对大数据安全分析需求逐渐迫切
  17. CSS中id选择器和类选择器的区别
  18. windows10系统设置选项里没有触摸板选项
  19. 对乔布斯逝世的47个评价
  20. 数据标准是什么?企业如何做好数据管理?

热门文章

  1. 7744问题的两种解法
  2. 远程连接vscode git提示 git not found. install it or configure it using the gitpath.
  3. 清华大学智班首席教授姚期智:求解人工智能的中国答案
  4. Typescript中的问号点(?.)是什么意思?
  5. 针对金融行业的数据治理解决方案
  6. 淘宝,拼多多,京东,大爷大妈上网购物最喜欢用哪个平台?
  7. 丹东辽东学院有月java的吗_辽东学院,丹东辽东学院的电话_地址_丹东地图 - 城市吧街景地图...
  8. 亿级流量架构演进实战 | 架构演进重构消息PUSH系统 05
  9. 【小状况】:NVDIA设置界面闪退
  10. DCDC的静态工作电流和效率问题