c++中使用keybd_event函数实现模拟按键功能

前言

最近项目需要做到一些模拟按键的操作。项目中主要用了keybd_event和PostMessage,这边先把keybd_event做一下记录。

keybd_event函数说明

1.函数原型

VOID keybd_event(BYTE bVk, BYTE bScan, DWORD dwFlags, DWORD dwExtralnfo);

2.参数说明

bVk:定义一个虚拟键码。键码值必须在1~254之间。
bScan : 定义该键的硬件扫描码。一般置0即可。
dwFlags : 定义函数操作的各个方面的一个标志位集。应用程序可使用如下一些预定义常数的组合设置标志位。
KEYEVENTF_EXTENDEDKEY:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。
KEYEVENTF_KEYUP:若指定该值,该键将被释放;若未指定该值,该键将被按下。
dwExtralnfo:定义与击键相关的附加的32位值。一般置0即可。

用法

这里举例一个组合键Ctrl+F4。这边是我一开始参考的代码内容。

//Ctrl+F4
keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY|0, 0);
keybd_event(VK_F4, 0, KEYEVENTF_EXTENDEDKEY|0, 0);
Sleep(100);//需有一定的间隔时间
keybd_event(VK_F4, 0, KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP, 0);

自己写了一个方便调用的函数,仅供参考。

void key_analog(int time, char key1 = 0x0, char key2 = 0x0, char key3 = 0x0, char key4 = 0x0)
{
	list<char> keys;
	if(0x0 != key1){
		keys.push_back(key1);	
	}
	if(0x0 != key2){
		keys.push_back(key2);	
	}
	if(0x0 != key3){
		keys.push_back(key3);	
	}
	if(0x0 != key4){
		keys.push_back(key4);	
	}
	if(keys.empty()){
		return;
	}

	for(list<char>::iterator it = keys.begin(); it != keys.end(); ++i){
		keybd_event(*it, 0, KEYEVENTF_EXTENDEDKEY|0, 0);
	}
	Sleep(time);
	list<char>::iterator it = keys.end();
	do{
		it--;
		keybd_event(*it, 0, KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP, 0);	
	}while(it != keys.begin());
}

以组合键CTRL+F4间隔0.5s为例,展示调用过程。

key_analog(500, VK_CONTROL, VK_F4);

小白新手一枚。代码有啥错误的话,请不要客气的回复指出Thanks(・ω・)ノ

附录

Virtual-Key Codes查询:
https://docs.microsoft.com/zh-cn/windows/desktop/inputdev/virtual-key-codes

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值