def __init__(self, device=None): """ device: /dev/input/eventX, default: all keyboard. """ self._hotkey_list = [] self._hotkey_seq_dict = {} self.devices = [] mouses, kbms = libkbm.getkbm() if len(kbms) <= 0: raise HotKeyError("没有发现至少一个键盘。") if device is None: self.kbms = kbms else: if device not in kbms: raise ValueError(f"{device} 不是键盘设备。") else: self.kbms = device self.LISTEN = 1 self.REPLACE = 2 self._mode = self.LISTEN # 把device注册到selectors self._selector = DefaultSelector() self._fileobjs = [] for device in self.kbms: fd = open(device, "rb") devfd = Device(fd) self._selector.register(devfd.fd, EVENT_READ, devfd) self._fileobjs.append(fd)
def disableMouse(): """ 通过 grab() 禁用鼠标。 """ mouses, keyboards = libkbm.getkbm() for name in mouses: logger.info("禁用鼠标: {}".format(name)) libkbm.disableDevice(name)
if e.matches(ev.EV_KEY.KEY_LEFTALT, value=1): print(time.asctime(), "matches LEFTALT down") key_prefix_flag = True elif e.matches(ev.EV_KEY.KEY_LEFTALT, value=0): print(time.asctime(), "matches LEFTALT up") key_prefix_flag = False else: return False return True s = registers(libkbm.getkbm()) while True: for fd, _ in s.select(): try: events = fd.data.events() except ev.EventsDroppedException: print("eventsDroppedException:") for err in ev.sync(): print("except:", err) continue for e in events: if e.matches(ev.EV_KEY): if listenhotkey(e): pass
def registers(kbms): selector = selectors.DefaultSelector() for kbm in kbms: print("加入:", kbm) fd = os.open(kbm, os.O_NONBLOCK | os.O_RDONLY) fdobj = open(fd, "rb") #fcntl.fcntl(fd, fcntl.F_SETFL, os.O_NONBLOCK) device = Device(fdobj) selector.register(device.fd, selectors.EVENT_READ, data=device) return selector mouses, keyboards = libkbm.getkbm() s = registers(mouses + keyboards) while True: #print("while 里面") for fd, event in s.select(): #print("for select() 里面") try: for e in fd.data.events(): #print("for events() 里面") if e.matches(ev.EV_KEY): print(e) else: print("======= 不是key事件:=======", e) except ev.EventsDroppedException: