
Private Declare Function GetKeyState Lib"user32"(ByVal nVirtKey As Long) As Integer
Do
Select Case GetKeyState(65)
Case -127
LeftDown 1
Delay 1000
LeftUp 1
Case -128
LeftDown 1
Delay 1000
LeftUp 1
End Select
Loop
在Unix/Linux下,并没有提供int kbhit(void)这个函数。在linux下开发控制台程序时,需要自己编写kbhit()实现的程序了。下面是kbhit在Unix/Linux下的一个实现。用到了一种终端 *** 作库termios。
下面是头文件kbhith:
QUOTE:
#ifndef KBHITh
#define KBHITh
void init_keyboard(void);
void close_keyboard(void);
int kbhit(void);
int readch(void);
#endif
下面式源程序kbhitc:
QUOTE: #include "kbhith"
#include <stdioh>
#include <termiosh>
static struct termios initial_settings, new_settings;
static int peek_character = -1;
void init_keyboard()
{
tcgetattr(0,&initial_settings);
new_settings = initial_settings;
new_settingsc_lflag &= ~ICANON;
new_settingsc_lflag &= ~ECHO;
new_settingsc_lflag &= ~ISIG;
new_settingsc_cc[VMIN] = 1;
new_settingsc_cc[VTIME] = 0;
tcsetattr(0, TCSANOW, &new_settings);
}
void close_keyboard()
{
tcsetattr(0, TCSANOW, &initial_settings);
}
int kbhit()
{
unsigned char ch;
int nread;
if (peek_character != -1) return 1;
new_settingsc_cc[VMIN]=0;
tcsetattr(0, TCSANOW, &new_settings);
nread = read(0,&ch,1);
new_settingsc_cc[VMIN]=1;
tcsetattr(0, TCSANOW, &new_settings);
if(nread == 1)
{
peek_character = ch;
return 1;
}
return 0;
}
int readch()
{
char ch;
if(peek_character != -1)
{
ch = peek_character;
peek_character = -1;
return ch;
}
read(0,&ch,1);
return ch;
}
试用后会明白,一个按键会有多个功能,那么在Android系统中是如何表示的呢?其实对于Android系统,每次按键只会有一个唯一「键值」响应,使用起来感觉会模模糊糊的,但是其实对于系统来说是很清晰的。
AVRCP全称(Audio/Video Remote Control Profile),是蓝牙协议中的一个profile。从名字上就可以看出主要应用于Audio/Video控制。每个按键并不是独立的,上-曲/下一曲是在正在播放音乐的时候才会有效,即才会向Android发送「键值」。
基于按键从Linux到Android分析具体对于的键值:
Linux扫描码 功能 映射字串 Android键值
00c8 200 开始放音乐 MEDIA_PLAY KEYCODE_MEDIA_PLAY
00c9 201 停止放音乐 MEDIA_PAUSE KEYCODE_MEDIA_PAUSE
00a3 163 下一曲 MEDIA_NEXT KEYCODE_MEDIA_NEXT
00a5 165 上-曲 MEDIA_PREVIOUS KEYCODE_MEDIA_PREVIOUS
Android应用代码,完整测试应用:TeskKey。
总结:1号键会交替发送KEYCODE_MEDIA_PLAY/KEYCODE_MEDIA_PAUSE;2/3号键会在播放音乐时分别发送KEYCODE_MEDIA_PREVIOUS/KEYCODE_MEDIA_NEXT。如果想要把蓝牙耳机上的按键利用起来,可以在接收到KEYCODE_MEDIA_PLAY时播放 无声音乐 以使能2/3号键。这样就能完整接收3种键值了自行控制了。这个具体自行设计(测试代码已经更新包含了)。
以上就是关于按键精灵左键按下和d起的监听。全部的内容,包括:按键精灵左键按下和d起的监听。、linux下怎么实现监听键盘按键、Android怎样监听蓝牙耳机的按键事件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)