keybd_event、SendInput笔记
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 ;
}
keybd_event、SendInput笔记的更多相关文章
- keybd_event 被 SendInput 替代
keybd_event 函数功能:该函数合成一次击键事件.系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数.在 ...
- VB调用sendinput API
http://files.cnblogs.com/files/liuzhaoyzz/VB%E8%B0%83%E7%94%A8sendinput_API.rar sendinput只支持发送字符或者组合 ...
- keybd_event 转载
转自 http://apps.hi.baidu.com/share/detail/14468670 Option Explicit Private Declare Sub keybd_event Li ...
- keybd_event 对应表
Option Explicit Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bSc ...
- python 常忘代码查询 和autohotkey补括号脚本和一些笔记和面试常见问题
笔试一些注意点: --,23点43 今天做的京东笔试题目: 编程题目一定要先写变量取None的情况.今天就是因为没有写这个边界条件所以程序一直不对.以后要注意!!!!!!!!!!!!!!!!!!!!! ...
- 在VC中使用SendInput函数实现中文的自动输入
很早以前写了一个刷卡程序,功能是定时监控读卡器,当发现有IC卡放到读卡器上后,自动识别出卡号,然后带着这个卡号搜索一个英文用户名和卡号的对照表,最后把英文用户名直接自动输入到当前光标所在的位置.本来程 ...
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
随机推荐
- 标准C程序设计七---101
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- yii批量插入数据
现在有如下数据: 查看代码 打印 1 $user=array( 2 0=>array('id'=>1,'name'=>'张三'), 3 0=>array(' ...
- dedecms--在后台增加会员添加
最近在研究dedecms需要前台页面不允许会员注册,而会员帐号是管理员在后台添加的,首先我们得在后台的栏目选项中有会员添加这一栏目: 1:在dede/inc的文件夹下面找到inc_memu.php;找 ...
- hdu 1077(单位圆覆盖问题)
Catching Fish Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HOJ - 2543最小费用流
题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2543 这个题目挺有意思. 自己扣了一会儿,发现图挺好建,就把(u,v,f,w) 拆成(u,v,f,0) ...
- Java原来如此-随机数
在Java中,生成随机数有两种方法.1是使用Random类.2是使用Math类中的random方法. 我们现在做个例子,比如生成20个0到10之间的随机数. 1.使用Random类的nextInt(n ...
- bzoj 3328 : PYXFIB
Discription Input 第一行一个正整数,表示数据组数据 ,接下来T行每行三个正整数N,K,P Output T行,每行输出一个整数,表示结果 Sample Input 1 1 2 3 S ...
- Android Framework 记录之一
简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有深究,现在研究framework框架层了. 记录 1.下载源码,目录如下: 2.Android系统的层次如下: 3.项目目录简单分析如下: 4 ...
- epoll 浅析以及 nio 中的 Selector
首先介绍下epoll的基本原理,网上有很多版本,这里选择一个个人觉得相对清晰的讲解(详情见reference): 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作 ...
- hql 时间
1.hql中时间格式转换 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String d ...