C++ 实现按键精灵——keybd_event和SendMessage
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相关推荐
- VB模拟出的按键精灵大部分功能
原贴:[原创帖]VB模拟出的按键精灵大部分功能 http://www.52pojie.cn/thread-46719-1-1.html (出处: 吾爱破解论坛) 模块部分: Private Dec ...
- python找色_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色点击功能思路: 抓取当前屏幕快 ...
- python 按键精灵 离线_(番外篇)Python操纵网盘客户端批量离线下载电影
上回(Python实现电影排行榜自动网盘下载(4)Cookies免登录+抓包下载)说到,一段时间内能进行多少次离线下载还是受限于验证码的输入. 在此有两个解决方案, 见招拆招 通过GUI优化验证码输入 ...
- python图色模拟脚本_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色搜索功能思路: 抓取当前屏幕快 ...
- 利用Python和win32编程范例——按需定制一个按键精灵
转自:作者 橘子一方 http://www.orangecube.net/articles/python-win32-example.html 利用Python和win32编程范例--按需定制一个按键 ...
- RF自动化--python模拟按键精灵
#Python下在windows系统下仿照按键精灵 功能:找到对应软件程序,并对界面进行操作,主要进行点击.信息输入.输出信息得检测 ##所用到得库 库名 作用 win32gui gui调用 win3 ...
- 按键精灵开发者认证1-6题库
这是以前整理的题库,包过. 题目:(前台)区域范围为(100,150)到(200,300)内的所有点是否均为"FFFFFF",是则弹出对话框"没有其他颜色",否 ...
- python 找色点击_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Python图片处理模块PIL(pillow) pywin32的主要作用 1.捕获窗口: 2.模拟鼠标键盘动作: 3.自动获取某路径下文件列表: 4.PIL截屏功能 找色点击功能思路: 抓取当前屏幕快 ...
- android x86 按键精灵,界面版按键精灵的使用【包含内置浏览器、打开程序的方法】...
包含界面的脚本.....................................................自己拖拽包,根据这里的控件名命名,然后自己拖拽 '打开九阴真经 Event Fo ...
最新文章
- Vulkan Tutorial 12 Fixed functions
- MPB:林科院袁志林组-​枫香-真菌互作培养体系构建
- java调用cd传输_Java调用Linux命令(cd的处理)
- 使用HtmlGenericControl控件动态产生一些HtmlControls
- 2021-02-25 matlab 字符串和数字同时写入excel
- 【C语言进阶深度学习记录】二十一 # 和 ## 号操作符的使用与分析
- 2018年的AI/ML惊喜及预测19年的走势(二)
- ipython文件每次打开重新运行吗_iPython中的多处理:当我不打开任何文件时打开的文件太多?...
- 重排列得到2的幂(51Nod-2515)
- SSLOJ 1298.网站计划
- 调度指挥系统解决方案
- 2019蓝桥杯决赛Java_2019年蓝桥杯省赛总结
- Unity商店插件/工具收藏篇
- Python turtle画图之心形图案
- ubuntu搭建PHP网站完整实例教程
- 计世资讯:用户对大数据安全分析需求逐渐迫切
- CSS中id选择器和类选择器的区别
- windows10系统设置选项里没有触摸板选项
- 对乔布斯逝世的47个评价
- 数据标准是什么?企业如何做好数据管理?
热门文章
- 7744问题的两种解法
- 远程连接vscode git提示 git not found. install it or configure it using the gitpath.
- 清华大学智班首席教授姚期智:求解人工智能的中国答案
- Typescript中的问号点(?.)是什么意思?
- 针对金融行业的数据治理解决方案
- 淘宝,拼多多,京东,大爷大妈上网购物最喜欢用哪个平台?
- 丹东辽东学院有月java的吗_辽东学院,丹东辽东学院的电话_地址_丹东地图 - 城市吧街景地图...
- 亿级流量架构演进实战 | 架构演进重构消息PUSH系统 05
- 【小状况】:NVDIA设置界面闪退
- DCDC的静态工作电流和效率问题