KeyboardListener.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import keyboard
  2. import time
  3. from screen_shot import ScreenCapture
  4. import io
  5. class KeyboardListener:
  6. def __init__(self, tcpServer):
  7. self.tcpServer = tcpServer
  8. self.t = 0
  9. self.c = 0
  10. self.key_state_map={}
  11. self.screen_capture = None
  12. def listen_keyboard(self,callback):
  13. self.callback = callback
  14. keyboard.hook(self.onKeyEvent)
  15. keyboard.wait()
  16. def onImgCapture(self,pic):
  17. imgByteArr = io.BytesIO()
  18. pic.save(imgByteArr, format='JPEG')
  19. bytes_data = imgByteArr.getvalue()
  20. self.tcpServer.send_img(bytes_data)
  21. def isCtrlHolding(self):
  22. return ('ctrl' in self.key_state_map and self.key_state_map['ctrl']=='down')\
  23. or ('left ctrl' in self.key_state_map and self.key_state_map['left ctrl']=='down')\
  24. or ('right ctrl' in self.key_state_map and self.key_state_map['right ctrl']=='down')
  25. def isAltHolding(self):
  26. return ('alt' in self.key_state_map and self.key_state_map['alt']=='down')\
  27. or ('left alt' in self.key_state_map and self.key_state_map['left alt']=='down')\
  28. or ('right alt' in self.key_state_map and self.key_state_map['right alt']=='down')
  29. def isKeyHolding(self,key):
  30. return (key in self.key_state_map and self.key_state_map[key]=='down')
  31. def onKeyEvent(self,key):
  32. #update key_state_map
  33. self.key_state_map[key.name.lower()]=key.event_type
  34. #is screenshoot?
  35. if self.isKeyHolding("caps lock")\
  36. and key.event_type=="down"\
  37. and key.name.lower()=="a":
  38. self.screen_capture = ScreenCapture()
  39. self.screen_capture.are_capture(self.onImgCapture)
  40. print(self.key_state_map)
  41. #is triple c?
  42. if key.event_type=="down" \
  43. and key.name.lower()=="c" \
  44. and self.isCtrlHolding():
  45. if self.t == 0:
  46. self.t=time.time()
  47. self.c += 1
  48. print("wait for nex c",self.c)
  49. return
  50. if (time.time()-self.t<0.5):
  51. self.t=time.time()
  52. self.c += 1
  53. print("wait for nex c:",self.c)
  54. else:
  55. self.c = 0
  56. self.t=0
  57. print("wait for nex c",self.c)
  58. if self.c>=2:
  59. self.c=0
  60. print("need trans")
  61. if self.callback:
  62. self.callback()