可以用FlexibleButton表示。
FlexibleButton 是一个基于标准 C 语言的小巧灵活的按键处理库,支持单击、连击、短按、长按、自动消抖,可以自由设置组合按键,可用于中断和低功耗场景。
该按键库解耦了具体的按键硬件结构,理论上支持轻触按键与自锁按键,并可以无限扩展按键数量。另外,FlexibleButton 使用扫描的方式一次性读取所有所有的按键状态,然后通过事件回调机制上报按键事件。
核心的按键扫描代码仅有三行,没错,就是经典的 三行按键扫描算法。使用 C 语言标准库 API 编写,也使得该按键库可以无缝兼容任意的处理器平台,并且支持任意 OS 和 non-OS(裸机编程)。
快速体验:
FlexibleButton 库中提供了一个测试例程 ./examples/demo_rtt_iotboard.c,该例程基于 RT-Thread OS 进行测试,硬件平台选择了 RT-Thread IoT Board Pandora v2.51 开发板。
当然你可以选择使用其他的 OS,或者使用裸机测试,只需要移除 OS 相关的特性即可。
如果你使用自己的硬件平台,只需要将 FlexibleButton 库源码和例程加入你既有的工程下即可。
DEMO 程序说明:
该示例程序可以直接在 RT-Thread stm32l475-atk-pandora BSP 中运行,可以在该 BSP 目录下,使用 menuconfig 获取本软件包。
这段代码没问题,我亲自验证过。
或者你尝试我这段代码,效果应该明显:
#include <Windows.h>#include <stdlib.h>
#include <stdio.h>
int main()
{
// 模拟Alt+Tab
keybd_event(VK_MENU, 0xb8, 0, 0) //Alt 按下
keybd_event(VK_TAB, 0x8f, 0, 0) // Tab 按下
while (1) // 停住观察
keybd_event(VK_TAB, 0x8f, KEYEVENTF_KEYUP, 0) // Tab 释放
keybd_event(VK_MENU, 0xb8, KEYEVENTF_KEYUP, 0) // Alt 释放
return 0
}
keybd_event函数模拟了键盘输入。调用该函数会让系统触发WM_KEYUP或者WM_KEYDOWN事件。
函数原型是:
VOID WINAPI keybd_event(
_In_ BYTE bVk,
_In_ BYTE bScan,
_In_ DWORD dwFlags,
_In_ ULONG_PTR dwExtraInfo
)
用bioskey()函数可以实现读取键盘的上下左右键函数原型:int bioskey (int cmd)
说 明:bioskey()的函数原型在bios.h中,即必须包含头文件#include<bios.h>
读取方向键可以用下面的程序啊!
#include<stdio.h>
#include<bios.h>
#define Key_Up 0x4800// 向上方向键
#define Key_Down 0x5000 // 向下方向键
#define Key_Right 0x4d00 // 向右方向键
#define Key_Left 0x4b00 // 向左方向键
void main()
{
int key=bioskey(0)
switch(key)
{
case Key_Up : {printf(" 向上方向键被按下")break}
case Key_Down : {printf(" 向下方向键被按下")break}
case Key_Left : {printf(" 向左方向键被按下")break}
case Key_Right : {printf(" 向右方向键被按下")break}
}
}