C/C++使用keybd_event模拟键盘按键
2024-08-28 05:21:47
#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);
}
最新文章
- webdriver杀死浏览器和Chromedriver进程
- block的语法
- Objective-C对象初始化 、 实例方法和参数 、 类方法 、 工厂方法 、 单例模式
- Hibernate个人总结
- webAPP前端必备知识
- 8 fastJson的使用
- 原生js写的一个当前年份日期星期和时间的显示
- 七、Nginx学习笔记七Nginx的Web缓存服务
- margin 如何居中
- Capacitor电容
- [转]为什么复制构造函数的参数需要加const和引用
- Vim 安装、配置及复制粘贴操作
- Dalvik源码阅读笔记(一)
- 如果指针为空,返回ERROR
- 使用git pull与本地文件冲突
- MyBatis关联查询,一对一关联查询
- node.js模块、包
- Android ViewPager里的所有图片设置监听打开同一活动显示不同图片
- Python学习之路目录(收藏整理)
- python练习笔记——用列表推导式生成二维列表