使用Python获取键盘的输入
使用Python获取键盘的输入
- 本文描述在 Ubuntu 20 上使用 python 获取键盘输入
1. 准备
- 安装 evdev
- 确认目标键盘的输入具体的设备号
- 使用
lsusb
查看键盘usb设备总线号和设备号 - 使用
cat /proc/bus/input/devices
和上面对应 ID - 使用
cat /dev/input/event4 | hexdump
去测试可疑的输入设备
- 使用
2. 使用如下 python 程序即可
- 本程序会将读到的键盘输入封装成 8Bytes 的 HID 键盘数据包,并添加到队列
import evdev
from evdev import InputDevice
from select import select
import rectrlkeymap = {#define USB_HID_MODIFIER_LEFT_CTRL 0x01
#define USB_HID_MODIFIER_LEFT_SHIFT 0x02
#define USB_HID_MODIFIER_LEFT_ALT 0x04
#define USB_HID_MODIFIER_LEFT_GUI 0x08 // (Win/Apple/Meta)
#define USB_HID_MODIFIER_RIGHT_CTRL 0x10
#define USB_HID_MODIFIER_RIGHT_SHIFT 0x20
#define USB_HID_MODIFIER_RIGHT_ALT 0x40
#define USB_HID_MODIFIER_RIGHT_GUI 0x80
#define USB_HID_KEY_L 0x0F"KEY_LEFTSHIFT" : 0x2,
"KEY_RIGHTSHIFT" : 0x20,
"KEY_LEFTCTRL" : 0x01,
"KEY_RIGHTCTRL" : 0x10,
"KEY_LEFTALT" : 0x4,
"KEY_RIGHTALT" : 0x40,
"KEY_LEFTMETA" : 0x8,
"KEY_RIGHTMETA" : 0x80,
}normalkeymap = {"KEY_A" : 0x04,
"KEY_B" : 0x05,
"KEY_C" : 0x06,
"KEY_D" : 0x07,
"KEY_E" : 0x08,
"KEY_F" : 0x09,
"KEY_G" : 0x0A,
"KEY_H" : 0x0B,
"KEY_I" : 0x0C,
"KEY_J" : 0x0D,
"KEY_K" : 0x0E,
"KEY_L" : 0x0F,
"KEY_M" : 0x10,
"KEY_N" : 0x11,
"KEY_O" : 0x12,
"KEY_P" : 0x13,
"KEY_Q" : 0x14,
"KEY_R" : 0x15,
"KEY_S" : 0x16,
"KEY_T" : 0x17,
"KEY_U" : 0x18,
"KEY_V" : 0x19,
"KEY_W" : 0x1A,
"KEY_X" : 0x1B,
"KEY_Y" : 0x1C,
"KEY_Z" : 0x1D,
"KEY_0" : 0x27,
"KEY_1" : 0x1E,
"KEY_2" : 0x1F,
"KEY_3" : 0x20,
"KEY_4" : 0x21,
"KEY_5" : 0x22,
"KEY_6" : 0x23,
"KEY_7" : 0x24,
"KEY_8" : 0x25,
"KEY_9" : 0x26,
"KEY_KP0" : 0x62,
"KEY_KP1" : 0x59,
"KEY_KP2" : 0x5A,
"KEY_KP3" : 0x5B,
"KEY_KP4" : 0x5C,
"KEY_KP5" : 0x5D,
"KEY_KP6" : 0x5E,
"KEY_KP7" : 0x5F,
"KEY_KP8" : 0x60,
"KEY_KP9" : 0x61,"KEY_KPASTERISK" : 0x55,
"KEY_KPPLUS" : 0x56,
"KEY_KPENTER" : 0x58,
"KEY_KPMINUS" : 0x57,
"KEY_KPDOT" : 0x63,
"KEY_KPSLASH" : 0x54,
"KEY_F1" : 0x3A ,
"KEY_F2" : 0x3B ,
"KEY_F3" : 0x3C ,
"KEY_F4" : 0x3D ,
"KEY_F5" : 0x3E ,
"KEY_F6" : 0x3F ,
"KEY_F7" : 0x40 ,
"KEY_F8" : 0x41 ,
"KEY_F9" : 0x42 ,
"KEY_F10": 0x43,
"KEY_F11": 0x44,
"KEY_F12": 0x45,"KEY_BACKSPACE" : 0x2A,
"KEY_TAB" : 0x2B,
"KEY_ENTER" : 0x28,
"KEY_CAPSLOCK" : 0x39,
"KEY_ESC" : 0x29,
"KEY_SPACE" : 0x2C,
"KEY_PAGEUP" : 0x4B,
"KEY_PAGEDOWN" : 0x4E,
"KEY_END" : 0x4D,
"KEY_HOME" : 0x4A,
"KEY_LEFT" : 0x50,
"KEY_UP" : 0x52,
"KEY_RIGHT" : 0x4F,
"KEY_DOWN" : 0x51,
"KEY_INSERT" : 0x49,
"KEY_DELETE" : 0x4C,
"KEY_NUMLOCK" : 0x53,
"KEY_GRAVE" : 0x35,
"KEY_BACKSLASH" : 0x31,
"KEY_LEFTBRACE" : 0x2F,
"KEY_RIGHTBRACE" : 0x30,
"KEY_SLASH" : 0x38,
"KEY_COMMA" : 0x36,
"KEY_DOT" : 0x37,
"KEY_SEMICOLON" : 0x33,
"KEY_APOSTROPHE" : 0x34,
"KEY_MINUS" : 0x2D,
"KEY_EQUAL" : 0x2E,
"KEY_SYSRQ" : 0x46,
"KEY_SCROLLLOCK" : 0x47,
"KEY_PAUSE" : 0x48,
}def ispress (str):if str :if str.find('down') != -1:return Trueif str.find('hold') != -1:return Trueif str.find('up') != -1:return Falsedef detectInputKey(devpath, msgq):dev = InputDevice(devpath)keylist = [0] * 9print(keylist)while True:for event in dev.read_loop():if event.type == evdev.ecodes.EV_KEY:msg = str(evdev.categorize(event))sendstr = re.findall(r"(\([^\)]*\))", msg)if len(sendstr):matchkey = sendstr[0][1:-1]print("matchkey:", matchkey)ctrkeyval = ctrlkeymap.get(matchkey)print("ctr key val:", ctrkeyval)keval = normalkeymap.get(matchkey)print("key val:", keval)if ctrkeyval : #ctrl keyif ispress(msg) :keylist[0] = keylist[0] | ctrkeyvalelse :keylist[0] = keylist[0] & (~ctrkeyval)elif keval : # normal keyif ispress(msg) :for i in range(2, 8):if keylist[i] == 0 or keylist[i] == keval:keylist[i] = kevalbreakelse :for i in range(2, 8):if keylist[i] == keval:keylist[i] = 0breakkeylist[8] = 0xffbyt = bytes(keylist)print(keylist, byt)if msgq :msgq.put(byt)if __name__ == "__main__":detectInputKey('/dev/input/event4', 0)
使用Python获取键盘的输入相关推荐
- python 获取键盘输入、同时有超时的功能_python 获取键盘输入,同时有超时的功能示例...
如下所示: ''' ###get keyboard input and timeout =5 import sys, time, msvcrt def readInput( caption, defa ...
- c# 获取键盘的输入
Console 类公开了三个方法获取键盘的输入,分别是Read .Readkey.ReadLine Read方法: 每次只能读入一个字符,如果没有字符可以读,返回-1,Read方法是不会马上读取的,读 ...
- python获取键盘输入函数input
用input函数可以获取键盘的输入,这样可以动态的改变一个变量的值. 比如: a = input("Enter a number\n") 运行结果如下:
- python获取键盘输入能不能不按回车键_Github获8300星!用Python开发的一个命令行的网易云音乐...
最近在逛Github发现了一个非常有趣的库musicbox,是用纯Python打造的,收获了8300颗星.Python语言简单易学,好玩有趣,身边越来越多的小伙伴都开始学习Python.她的魅力非常大 ...
- python获取键盘输入_python之判断数据异常Python读取键盘输入
Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘.如下: <python之判断数据异常Python读取键盘输入>总结了关于python网站教程,对于我们来www. ...
- python从键盘上输入10个整数、输出奇数和_数据库 从键盘上输入10个整数型的数值,分别统计奇数和偶数的个数...
从键盘上输入10个整数,并求出这10个数中所有奇数的和与所有偶数之和要求:分别用while,do ...while #includelongmain(void){\x05longa[10]={0};\ ...
- Python从键盘中输入一个列表
从键盘上输入一个列表,在键盘上输入形式:[1,2,3,5,6] 直接上代码 x = input() x = x.strip('[') x = x.strip(']') xlist = x.split( ...
- python获取键盘输入_Python 3 学习笔记之——键盘输入和读写文件
1. 键盘输入 Python提供了 input() 内置函数从标准输入读入一行文本,默认的标准输入是键盘.input 可以接收一个 Python 表达式作为输入,并将运算结果返回. str = inp ...
- python中通过什么函数来获取键盘的输入_Python中使用 input 函数来获取输入
所谓输入,就是用代码获取用户通过键盘输入的信息. 例如:去银行取钱,在 ATM 上输入密码. 在 Python 中,如果要获取用户在键盘上的输入信息,需要使用到input()函数. 函数input() ...
- python获取键盘输入_python如何获取键盘输入
python2中:raw_input函数 raw_input() 函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符):str = raw_input("Enter your in ...
最新文章
- 【Qt】Qt再学习(十五):关于paintEvent、QPainter学习这一个demo就够了
- sqlserver清除日志
- java model.put_深入理解Java内存模型(一)——基础
- GL ERROR - after deleteUnusedTextures() glError (0x502)
- 高并发下秒杀商品,必须知道的9个细节
- php返回200,关于API 使用 HTTP 状态码还是全部返回 200
- 一行Python代码能干什么?惊了!
- DisplayLink 安装错误
- 《深入理解JAVA虚拟机》周志明 第三版 - 第三章 垃圾收集器与内存分配策略
- 恒凯USB数据采集卡在国产麒麟操作系统下的应用(四)QT环境设置及数据采集实验
- AppStore上线审核
- 对云计算机的想法,我对云计算技术的看法
- H5生成二维码及保存
- pdf怎么分割成多个文件?有两种方式
- Java修改JTable单元格背景色
- rtsp流媒体服务器的搭建
- 【它山之玉】Trump:让人们发出噢、啊的惊叹声!—科学网马臻
- 如何让图像过渡更自然 python_如何使用Python和OpenCV融合、拼接照片?
- windows linux 使用usb | WiFi连接手机摄像头
- win7 计算器的用法