keybd_event、SendInput笔记
2024-08-24 20:13:35
void keybd_event(BYTE bVk, BYTE bScan, DWORD dwFlags, ULONG_PTR dwExtraInfo);
bVk:虚拟键码
bScan:键的硬件扫描码,一般置为0
dwFlags:一般为0或KEYEVENTF_KEYUP,置为0表示键按下
dwExtraInfo:与按键关联的附加值,一般为0
这个函数已被取代。建议使用SendInput替代它
示例
#include <Windows.h>
int main()
{
Sleep();
keybd_event(VK_CONTROL, , , ); //按下Control
keybd_event('A', , , ); //按下A
keybd_event('A', , KEYEVENTF_KEYUP, ); //释放A
keybd_event('X', , , ); //按下X
keybd_event('X', , KEYEVENTF_KEYUP, ); //释放X
keybd_event(VK_CONTROL, , KEYEVENTF_KEYUP, ); //释放Control
return ;
}
UINT SendInput(UINT cInputs, LPINPUT pInputs, int cbSize);
cInputs:pInputs数组中结构的数量
pInputs:INPUT结构的数组。每个结构代表一个要被插入键盘或鼠标输入流的事件
cbSize:一个INPUT结构的大小,以字节为单位
示例
#include <Windows.h>
int main()
{
Sleep();
INPUT inputs[] =
{
{ INPUT_KEYBOARD, {.ki = { VK_CONTROL, , , , } } }, //按下Control
{ INPUT_KEYBOARD, {.ki = { 'A', , , , } } }, //按下A
{ INPUT_KEYBOARD, {.ki = { 'A', , KEYEVENTF_KEYUP, , } } }, //释放A
{ INPUT_KEYBOARD, {.ki = { 'X', , , , } } }, //按下X
{ INPUT_KEYBOARD, {.ki = { 'X', , KEYEVENTF_KEYUP, , } } }, //释放X
{ INPUT_KEYBOARD, {.ki = { VK_CONTROL, , KEYEVENTF_KEYUP, , } } } //释放Control
};
SendInput(sizeof inputs / sizeof(INPUT), inputs, sizeof(INPUT));
return ;
}
注意:在这个示例中,对数组inputs的初始化,采用的是C语言的风格,C++不支持这样的语法
在C++中,可以这么写
#include <Windows.h>
int main()
{
Sleep();
INPUT inputs[];
inputs[].type = INPUT_KEYBOARD;
inputs[].ki = { VK_CONTROL, , , , }; //按下Control
inputs[].type = INPUT_KEYBOARD;
inputs[].ki = { 'A', , , , }; //按下A
inputs[].type = INPUT_KEYBOARD;
inputs[].ki = { 'A', , KEYEVENTF_KEYUP, , }; //释放A
inputs[].type = INPUT_KEYBOARD;
inputs[].ki = { 'X', , , , }; //按下X
inputs[].type = INPUT_KEYBOARD;
inputs[].ki = { 'X', , KEYEVENTF_KEYUP, , }; //释放X
inputs[].type = INPUT_KEYBOARD;
inputs[].ki = { VK_CONTROL, , KEYEVENTF_KEYUP, , }; //释放Control
SendInput(sizeof inputs / sizeof(INPUT), inputs, sizeof(INPUT));
return ;
}
最新文章
- SVN冲突
- 微信扫码支付~官方DEMO的坑~参数不能自定义
- C++之STL
- npm 打包 electron app 报错问题
- excel中单元格计算
- ◆ 火狐浏览器去除JS方法:
- 驱动笔记 - file_operations
- QT5 串口收发实例代码
- Windows Latex 中日文字体设置例
- Windows系统下八大具有高逼格的DOS命令之一【ping】
- left join on/right join on/inner join on/full join on连接
- Mysql 反向解析 导致远程访问慢
- 原生JS实现随着鼠标滚动到元素位置触发对应css3动画,简单易用滚动监测
- linux驱动之中断处理过程C程序部分
- C# 通用数据库配置界面,微软原生DLL重整合
- jenkins net编译部署 笔记 tips
- str.replace()和re.sub()/calendar.month_abbr/re.subn()/upper和lower和capitalize/贪婪匹配和费贪婪匹配/re.S和re.DOTALL 笔记
- vue学习六之vuex
- 直接通过OptionalAttribute, DefaultParameterValueAttribute定义缺省参数
- HDU 1540 Tunnel Warfare
热门文章
- Day 21 三元表达式、生成器函数、列表解析
- doT.js-doT模板方便快捷的组织页面DOM
- React-Native解决ListView 在Android手机上无吸顶效果
- BZOJ 3309 莫比乌斯反演
- Codeforces 919 B. Perfect Number
- Codeforces Gym101606 E.Education (2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017))
- 洛谷—— P2117 小Z的矩阵
- highcharts中放aqi及6要素,再加上气象5要素的图
- JDK1.8日期时间库学习
- GCD CoreData 简化CoreData操作(转)