C/C++使用keybd_event模拟键盘按键
#include <stdio.h>
#include <Windows.h> /*
设置键盘大小写状态
big:为TRUE则切换大写状态,否则切换小写状态
*/
VOID MySetKeyBig(BOOL big = FALSE); /*
模拟键盘按键,支持大小写
str:需要按出的字符串
*/
VOID MyAnalogKey(char *str); int main(void)
{
// 当程序运行1.5s时再执行模拟按键,以便选择需要操作的窗口
Sleep();
MyAnalogKey("Love life,Love BiaoGe.0123456789");
system("pause");
return ;
} VOID MySetKeyBig(BOOL big)
{
// 判断键盘CapsLock键是否开启状态,开启状态则为大写,否则为小写
if (GetKeyState(VK_CAPITAL))
{
// 如果当前键盘状态为大写,要求改小写,则模拟按键CapsLock切换状态
if (!big)
{
keybd_event(VK_CAPITAL, NULL, KEYEVENTF_EXTENDEDKEY | , NULL);
keybd_event(VK_CAPITAL, NULL, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, NULL);
}
}
else
{
// 如果当前键盘状态为小写,要求改大写,则模拟按键CapsLock切换状态
if (big)
{
keybd_event(VK_CAPITAL, NULL, KEYEVENTF_EXTENDEDKEY | , NULL);
keybd_event(VK_CAPITAL, NULL, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, NULL);
}
}
} VOID MyAnalogKey(char *str)
{
int iLen = ;
char *tmp = NULL;
INPUT *keys = NULL;
BOOL bOldState = FALSE; // 保存此操作前的键盘状态
bOldState = (BOOL)GetKeyState(VK_CAPITAL);
iLen = lstrlen(str);
tmp = (char *)malloc(iLen);
memmove(tmp, str, iLen);
for (int i = ; i < iLen; i++)
{
// 某些符号非直属键盘按键,这里只过滤转换两个,以后用到其它字符自行添加过滤
if (tmp[i] == ' ')
{
// 产生一个击键消息步骤:按下->抬起
keybd_event(VK_SPACE, NULL, KEYEVENTF_EXTENDEDKEY | , NULL);
keybd_event(VK_SPACE, NULL, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, NULL);
}
else if (tmp[i] == ',')
{
keybd_event(VK_OEM_COMMA, NULL, KEYEVENTF_EXTENDEDKEY | , NULL);
keybd_event(VK_OEM_COMMA, NULL, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, NULL);
}
else if (tmp[i] >= 'a' && tmp[i] <= 'z')
{ // 根据字符大小写切换键盘大小写状态
MySetKeyBig();
// keybd_event只识别大写
keybd_event((BYTE)tmp[i]-, NULL, KEYEVENTF_EXTENDEDKEY | , NULL);
keybd_event((BYTE)tmp[i]-, NULL, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, NULL);
}
else if ((tmp[i] >= 'A' && tmp[i] <= 'Z') || (tmp[i] >= '' && tmp[i] <= ''))
{
MySetKeyBig();
keybd_event((BYTE)tmp[i], NULL, KEYEVENTF_EXTENDEDKEY | , NULL);
keybd_event((BYTE)tmp[i], NULL, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, NULL);
}
else
{
keybd_event((BYTE)tmp[i]+, NULL, KEYEVENTF_EXTENDEDKEY | , NULL);
keybd_event((BYTE)tmp[i]+, NULL, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, NULL);
}
}
// 恢复此操作之前的键盘状态
MySetKeyBig(bOldState);
free(tmp);
}

C/C++使用keybd_event模拟键盘按键的更多相关文章
- keybd_event模拟键盘按键,mouse_event怎么用
从 模仿UP主,用Python实现一个弹幕控制的直播间! - 蛮三刀酱 - 博客园 (cnblogs.com) 知道了 PyAutoGUI: * Moving the mouse and clicki ...
- C#窗体模拟键盘按键(组合键)产生事件 ---- 通过keybd_event()函数
如何模拟键盘按键触发产生的事件,比如模拟按下Alt + F4 关闭当前程序,Ctrl+Shift 切换输入法等 可以通过win32api 键盘事件 keybd_event() 来实现 1.定义键盘按键 ...
- C#窗体如何通过keybd_event()函数模拟键盘按键(组合键)产生事件
如何模拟键盘按键触发产生的事件,比如模拟按下Alt + F4 关闭当前程序,Ctrl+Shift 切换输入法等 可以通过win32api 键盘事件 keybd_event() 来实现 1.定义键盘按键 ...
- UI自动化测试(四)AutoIT工具使用和robot对象模拟键盘按键操作
AutoIT简介 AutoIt 目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作.它利用模拟键盘按键,鼠标移动和窗口/ ...
- golang实现模拟键盘按键
公司前段时间要我写个小项目需要可以局域网内一个ipad控制另一台pc上的键盘输入,github上找了找,居然有个robotgo库这么神级的存在,感觉go的库真是越来越多了,虽然大部分都是第三方的.ht ...
- Delphi定时模拟键盘按键例程
delphi模拟键盘按键实例delphi模拟键盘按键实例,只是模拟一个按键的例子而已.到一定时间按下模拟按下一个按键,delphi7编译通过. 10秒点击一下H键,其他键你们去找数值替换吧,网上大把的 ...
- Helium文档5-WebUI自动化-press模拟键盘按键输入技巧
前言 press方法是用来模拟键盘按键输入,可以组合使用,来模拟键盘输入,解决一些难定位的元素 入参介绍 以下是press源码中的函数介绍 def press(key): :入参 :param ke ...
- python 模拟按键模拟键盘按键按下放开
python模拟按键 pip install pypiwin32安装库 import win32conimport win32apiimport time 导入 打个比方模拟A win32api.ke ...
- selenium学习-模拟键盘按键操作
导入 from selenium.webdriver.common.keys import Keys 格式:Keys.XXX 一般这么用:send_keys(Keys.XXX) # coding= ...
随机推荐
- main方法击破
什么是main方法? 是类中的一段代码,可以让程序独立运行. public class HelloWord{ public static void main(String[] args) { for ...
- 利用ajax短轮询+php与服务器交互制作简易即时聊天网站
主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Server-sent Events). 本文主要介绍ajax短轮询的简易实现方式. 看懂此文 ...
- mysql二:库操作
一.系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等 performance_schema: My ...
- 在MAC上搭建python数据分析开发环境
最近工作转型到数据开发领域,想在本地搭建一个数据开发环境.自己有三年python开发经验,马上想到使用numpy.scipy.sklearn.pandas搭建一套数据开发环境. ubuntu的环境,百 ...
- jQuery.vilidation.js登录&注册
代码解析:通过ajax获取url路径链接php接口做登录和注册获取到的数据传到数据库. ajax利用四步: //1.创建一个ajax对象; //2.打开请求: //判断用户传递的是get还是post请 ...
- 任务二:零基础HTML及CSS编码练习
任务目的 针对设计稿样式进行合理的HTML架构,包括以下但不限于: 掌握常用HTML标签的含义.用法 能够基于设计稿来合理规划HTML文档结构 理解语义化,合理地使用HTML标签来构建页面 掌握基本的 ...
- CSS3图片边框
CSS3图片边框 顾名思义就是为边框应用背景图片,它和我们常用的background属性比较相似,语法规则:
- 如何将bug杀死在摇篮里?
阿里妹导读:在欧洲中世纪的传说中,有一种叫“人狼”的妖怪,就是人面狼身.它们会讲人话,专在月圆之夜去袭击人类.而且传说中对“人狼”用一般的枪弹是不起作用的,普通子弹都伤不到也打不死它,只有一种用银子作 ...
- sqlplus中设置在屏幕中上不打印出输出
在某些特定的情况下我们想在做某种实验,需要执行一段sql语句,但是不想在屏幕上打印出sql语句的结果(太长了)可以采用如下方式.1 把想要执行的语句写到一个sql脚本中,例如:[oracle@i ...
- May 10th 2017 Week 19th Wednesday
Imagination is the source of creation. 想象是创作之源. Sometimes, creation and innovation are very simple, ...