在evdev中,我试图检查是否插入了鼠标和键盘,如果是这样,则将设备路径分配给要使用的变量。当我使用此代码
中,我刚刚检查了设备名称中的鼠标或键盘名称 ,这工作了一段时间。if ("KEYBOARD" in device.name) or ("Keyboard" in device.name):
print ("This is a Keyboard")
keyboarddir = device.path
keyboard = evdev.InputDevice(keyboarddir)
插入了另一只鼠标后,我发现他们并不全部说鼠标,我想知道是否有一种方法可以将一个称为" BTN_RIGHT"的字符串与设备功能进行比较。我键入的代码不起作用将是这样的。
if ("BTN_RIGHT" in device.capabilities(verbose=True)):
print ("this is the mouse")
请帮助我弄清楚如何更轻松地检测鼠标,或者实际上能够搜索其功能并将其与其他字符串进行比较!
因为您要解析的数据结构看起来像:
{ 1: [272, 273], 3: [0, 1] }
...您可能会做类似的事情(在这里不使用verbose=True
,因为如果我们只是与原始常数一起工作要简单得多):
caps = device.capabilities()
has_rmb = evdev.ecodes.BTN_RIGHT in caps.get(evdev.ecodes.EV_KEY, [])
如果您真的想要使用字符串表单(我不建议),那么您的数据将看起来像:
{ ('EV_KEY', 1): [('BTN_MOUSE', 272), ('BTN_RIGHT', 273), ...],
('EV_ABS', 3): [(('ABS_X', 0), AbsInfo(min=0, max=15360, fuzz=128, flat=0)),
(('ABS_Y', 1), AbsInfo(min=0, max=10240, fuzz=128, flat=0)),] }
...您可能会做类似的事情:
caps = device.capabilities()
key_codes = evdev.ecodes[('EV_KEY', ecodes.EV_KEY)]
has_rmb = 'BTN_RIGHT' in [ kc[0][0] for key_codes ]
...但这是很多额外的代码和开销,可以在cruft上使用,仅出于人类可读性而在数据结构中。