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笔记的更多相关文章

  1. keybd_event 被 SendInput 替代

    keybd_event   函数功能:该函数合成一次击键事件.系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数.在 ...

  2. VB调用sendinput API

    http://files.cnblogs.com/files/liuzhaoyzz/VB%E8%B0%83%E7%94%A8sendinput_API.rar sendinput只支持发送字符或者组合 ...

  3. keybd_event 转载

    转自 http://apps.hi.baidu.com/share/detail/14468670 Option Explicit Private Declare Sub keybd_event Li ...

  4. keybd_event 对应表

    Option Explicit Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bSc ...

  5. python 常忘代码查询 和autohotkey补括号脚本和一些笔记和面试常见问题

    笔试一些注意点: --,23点43 今天做的京东笔试题目: 编程题目一定要先写变量取None的情况.今天就是因为没有写这个边界条件所以程序一直不对.以后要注意!!!!!!!!!!!!!!!!!!!!! ...

  6. 在VC中使用SendInput函数实现中文的自动输入

    很早以前写了一个刷卡程序,功能是定时监控读卡器,当发现有IC卡放到读卡器上后,自动识别出卡号,然后带着这个卡号搜索一个英文用户名和卡号的对照表,最后把英文用户名直接自动输入到当前光标所在的位置.本来程 ...

  7. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  8. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  9. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

随机推荐

  1. React-Native解决ListView 在Android手机上无吸顶效果

    stickySectionHeadersEnabled={true} stickyHeaderIndices={[0]}

  2. Codeforces Gym101502 J-取数博弈

    还有J题,J题自己并不是,套的板子,大家写的都一样,因为大家都是套板子过的,贴一下代码,等学会了写一篇博客... J.Boxes Game 代码: 1 //J. Boxes Game-取数博弈-不会, ...

  3. Javascript 评估用户输入密码的强度

    什么是一个安全的密码呢? 1.如果密码少于5位,那么就认为这是一个弱密码. 2.如果密码只由数字.小写字母.大写字母或其它特殊符号当中的一种组成,则认为这是一个弱密码. 3.如果密码由数字.小写字母. ...

  4. MySQL通用编程

    第一阶段:基础入门 第一章:关系模型 第二章:基本查询 第三章:复杂查询 第四章:权限控制 第五章:查询优化 第二阶段:模型设计 第六章:设计选择 第七章:函数依赖 第八章:分解算法 第九章:设计过程 ...

  5. 【UTR #2】题目交流通道

    题目描述 定好了难度,雄心勃勃的吉米多出题斯基开始寻找智慧的神犇星球的居民出题. 然而吉米多出题斯基没有料到,神犇星球的居民告诉吉米多出题斯基:"今年神犇星球经济不景气,大家都想宅在家里,哪 ...

  6. spring beans 接口

  7. Spring MVC中@ControllerAdvice注解实现全局异常拦截

    在网上很多都把Advice翻译成增强器,其实从翻译工具上看到,这个单词翻译是忠告,通知的意思. 首先这个注解实在Spring Web包下,而Spring MVC离不开Spring Web的依赖,所以经 ...

  8. Android 自定义ListView Item侧滑删除

    本程序是基于网上开源项目修改而来,具体来源忘了,懒得搜了,如果有不合适的地方,请原作者联系我,我会及时回复和处理的! 该例子程序中主要包含两个ListView,一个是实现侧滑删除,一个是侧滑出菜单,代 ...

  9. 如何使用ssh远程编辑定时任务crontab?

    linxu定时任务使用crontab,编辑crontab可以直接编辑:crontab -e:也可以直接读取文件 crontab file.这两种操作都不需要特殊权限sudo.区别在于,crontab ...

  10. Keras使用的一些细节

    1.Keras输出的loss,val这些值如何保存到文本中去: Keras中的fit函数会返回一个History对象,它的History.history属性会把之前的那些值全保存在里面,如果有验证集的 ...