C语言-按键模拟

#include <stdio.h>
#include <windows.h>
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
#define DELAY_TIME 50


void info(const char str[]) {
	printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
	printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
	printf("%s          ",str);
}
 
int main(void){

	printf("======Jason制作=====\n");
	printf("模拟W键和鼠标右键\n");
	printf("按Esc键停止按键模拟!\n");
	printf("按F12键开始按键模拟!\n");
	printf("====================\n");
	info("5秒后自动开启按键模拟!");
	Sleep (5000);
	info("已启动按键模拟!");
	while(1) {
		if(KEYDOWN(VK_ESCAPE)) { // 按Esc键停止按键模拟
			info("已停止按键模拟!");
			while (!KEYDOWN(VK_F12)) Sleep(10); // 按F12键结束循环休眠
			info("已启动按键模拟!");
		} else {
			keybd_event ('W' , 0, 0, 0);
			Sleep (DELAY_TIME / 2);
			keybd_event ('W', 0, KEYEVENTF_KEYUP, 0);
			Sleep (DELAY_TIME / 2);
			mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 );
		}
	}
	return 0;
}

输出结果

======Jason制作=====
模拟W键和鼠标右键
按Esc键停止按键模拟!
按F12键开始按键模拟!
====================
已停止按键模拟!
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的按键状态机的 C 语言代码示例: ```c #include <stdio.h> // 定义按键状态枚举类型 enum KeyState { KEY_UP, KEY_DOWN, KEY_PRESS, KEY_RELEASE }; // 定义按键状态机结构体 struct KeyStateMachine { enum KeyState currentState; enum KeyState lastState; }; // 初始化按键状态机 void initKeyStateMachine(struct KeyStateMachine *stateMachine) { stateMachine->currentState = KEY_UP; stateMachine->lastState = KEY_UP; } // 更新按键状态机 void updateKeyStateMachine(struct KeyStateMachine *stateMachine, int isKeyDown) { stateMachine->lastState = stateMachine->currentState; if (isKeyDown) { if (stateMachine->lastState == KEY_UP || stateMachine->lastState == KEY_RELEASE) { stateMachine->currentState = KEY_DOWN; } else if (stateMachine->lastState == KEY_DOWN || stateMachine->lastState == KEY_PRESS) { stateMachine->currentState = KEY_PRESS; } } else { if (stateMachine->lastState == KEY_UP || stateMachine->lastState == KEY_RELEASE) { stateMachine->currentState = KEY_UP; } else if (stateMachine->lastState == KEY_DOWN || stateMachine->lastState == KEY_PRESS) { stateMachine->currentState = KEY_RELEASE; } } } int main() { struct KeyStateMachine keyState; initKeyStateMachine(&keyState); // 模拟按键状态变化 updateKeyStateMachine(&keyState, 1); printf("Current state: %d\n", keyState.currentState); updateKeyStateMachine(&keyState, 1); printf("Current state: %d\n", keyState.currentState); updateKeyStateMachine(&keyState, 0); printf("Current state: %d\n", keyState.currentState); updateKeyStateMachine(&keyState, 0); printf("Current state: %d\n", keyState.currentState); return 0; } ``` 这个按键状态机可以处理按键的四种状态:弹起、按下、按住和释放。在 `updateKeyStateMachine` 函数中,根据当前状态和上一个状态以及按键是否按下,更新当前状态。在 `main` 函数中,我们模拟按键状态的变化,并输出了当前状态。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值