繁体   English   中英

寻找设备功能中的一环; 了evdev; 蟒蛇

[英]Looking for a string in device capabilities; evdev; python

在evdev中,我试图检查是否插入了鼠标和键盘,如果是,则将设备路径分配给要使用的变量。 这工作了一段时间,因为我刚刚使用此代码在设备名称中检查了名称Mouse或Keyboard

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 ]

...但是,要解决残酷的问题,还有很多额外的代码和开销,这些只是为了人类可读性而存在于数据结构中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM