class KeyboardHandler(): def __init__(self): logger.debug("Keyboard deteccter created.") self.hm = HookManager() self.hm.KeyDown = self.key_down self.hm_thread = None self.input_record_list = [] self.hot_key_list = [24, 38, 52, 10, 11, 12] # QAZ123 self.hot_key_list2 = [24, 38, 52, 87, 88, 89] # QAZ123 with 123 in side keyboard self.sp = SoundPlayer() def set_style(self, style): self.sp.set_style(style) def set_volume(self, volume): self.sp.set_volume(volume) def set_pitch(self, pitch): self.sp.set_pitch(pitch) def get_player_infor(self): return self.sp.get_infor() def key_down(self, event): self.sp.play(event.ScanCode) self.check_show_window(event.ScanCode) # logger.debug(str(event)) # check input if satisfy the hotkey def check_show_window(self, key_code): if self.input_record_list and key_code == self.input_record_list[-1]: return input_record_length = len(self.input_record_list) next_key_code = self.hot_key_list[input_record_length] next_key_code2 = self.hot_key_list2[input_record_length] if key_code == next_key_code or key_code == next_key_code2: self.input_record_list.append(key_code) if input_record_length == 5: show_GUI() self.input_record_list = [] else: # clear the record if not satisfy self.input_record_list = [] def start_detecting(self): self.hm_thread = threading.Thread(target=self.hm.start, args=()) self.hm_thread.start() # kill all threads def stop_detecting(self): self.hm_thread._Thread__stop() self.hm.cancel()
class ThreadedKeyBind(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): self.new_hook = HookManager() self.new_hook.KeyDown = self.OnKeyPress self.new_hook.HookKeyboard() self.new_hook.start() # self.new_hook.cancel() def OnKeyPress(self, event): """ function called when any key is pressed """ global prev_Key, key_binding if event.Key == key_binding[1] and prev_Key == key_binding[0]: if utils.active == 1: utils.active = 0 elif utils.active == 0: utils.active = 1 prev_Key = None elif event.Key == 'c' and prev_Key == 'Control_L': self.text = xerox.paste(xsel=True) utils.clips.append(self.text) # pickle clips data with open(os.path.join(os.path.dirname(__file__), 'clips_data'), "wb") as f: pickle.dump(utils.clips, f, protocol=2) print("You just copied: {}".format(self.text)) elif event.Key == 'z' and prev_Key == 'Control_L': print("can") self.new_hook.cancel() else: prev_Key = event.Key return True
class Keyboard(object): __hook = None def __init__(self): pass def getKeys(self): pass def getKeysData(self,socketClient, size): def sendKey(event): data = json.dumps({'type': 6, 'code': 1 ,'status' : 'OK', 'keyboard': str(event)}) try: socketClient.sendall(data) except: return self.__hook = HookManager() self.__hook.HookKeyboard() self.__hook.KeyDown = sendKey self.__hook.start() time.sleep(size) self.__hook.cancel()
class TestPyxHook(TestBase): """ Tests the pyxhook library for Linux. """ def setUp(self): pass def tearDown(self): pass # Key generator. def generator(self, s, key=None): for i in range(len(s)): if key is not None: yield key if s[i] in specialKeysyms.keys(): yield specialKeysyms[s[i]] else: yield s[i] def reportevent(self, event): # It's not case sensitive. ek = string.lower(event.Key) ngn = string.lower(next(self.gn)) # We don't care about underscores. ngn = string.replace(ngn, "_", "") print ek, ngn self.assertEqual(ek, ngn) def base_test(self): self.hm = HookManager() self.hm.HookKeyboard() self.hm.HookMouse() self.hm.KeyDown = self.reportevent self.hm.MouseAllButtonsDown = self.reportevent self.hm.MouseAllButtonsUp = self.reportevent self.hm.start() d = Display() def test_numbers(self): numbers = '0123456789' self.gn = self.generator(numbers) self.base_test() emulateWritingString(d, numbers, 0.075) # 75ms self.hm.cancel() def test_lowercase(self): lc = u'abcdefghijklmnopqrstuvwxyz' self.gn = self.generator(lc) self.base_test() emulateWritingString(d, lc, 0.075) # 75ms self.hm.cancel() def test_uppercase(self): uc = u'abcdefghijklmnopqrstuvwxyz' self.gn = self.generator(uc, 'shift_l') self.base_test() emulateWritingString(d, string.upper(uc), 0.075) # 75ms self.hm.cancel() def test_simple_symbols(self): uc = u"º'¡\t\n<+ç" # \r self.gn = self.generator(uc) self.base_test() emulateWritingString(d, uc, 0.075) # 75ms self.hm.cancel() def test_simple_combos_symbols(self): keys = ['shift_l', 'shift_r', 'alt_l'] for key in keys: ss = u"2" self.gn = self.generator(ss, key) self.base_test() emulateWritingString(d, ss, 0.075, key) # 75ms self.hm.cancel()