做了个python3 pynput 监控鼠标键盘操作并回放的模块
import pynput import time import re import threading class ControlMouseKeyboard(object): mouse = pynput.mouse.Controller() keyboard = pynput.keyboard.Controller() mouse_listener = None keyboard_listener = None mouse_keyboard_move = [] time_order = [] default_keys = { 'Key.alt': pynput.keyboard.Key.alt, 'Key.alt_l': pynput.keyboard.Key.alt_l, 'Key.alt_r': pynput.keyboard.Key.alt_r, 'Key.alt_gr': pynput.keyboard.Key.alt_gr, 'Key.backspace': pynput.keyboard.Key.backspace, 'Key.caps_lock': pynput.keyboard.Key.caps_lock, 'Key.cmd': pynput.keyboard.Key.cmd, 'Key.cmd_l': pynput.keyboard.Key.cmd_l, 'Key.cmd_r': pynput.keyboard.Key.cmd_r, 'Key.ctrl': pynput.keyboard.Key.ctrl, 'Key.ctrl_l': pynput.keyboard.Key.ctrl_l, 'Key.ctrl_r': pynput.keyboard.Key.ctrl_r, 'Key.delete': pynput.keyboard.Key.delete, 'Key.down': pynput.keyboard.Key.down, 'Key.end': pynput.keyboard.Key.end, 'Key.enter': pynput.keyboard.Key.enter, 'Key.esc': pynput.keyboard.Key.esc, 'Key.f1': pynput.keyboard.Key.f1, 'Key.f2': pynput.keyboard.Key.f2, 'Key.f3': pynput.keyboard.Key.f3, 'Key.f4': pynput.keyboard.Key.f4, 'Key.f5': pynput.keyboard.Key.f5, 'Key.f6': pynput.keyboard.Key.f6, 'Key.f7': pynput.keyboard.Key.f7, 'Key.f8': pynput.keyboard.Key.f8, 'Key.f9': pynput.keyboard.Key.f9, 'Key.f10': pynput.keyboard.Key.f10, 'Key.f11': pynput.keyboard.Key.f11, 'Key.f12': pynput.keyboard.Key.f12, 'Key.f13': pynput.keyboard.Key.f13, 'Key.f14': pynput.keyboard.Key.f14, 'Key.f15': pynput.keyboard.Key.f15, 'Key.f16': pynput.keyboard.Key.f16, 'Key.f17': pynput.keyboard.Key.f17, 'Key.f18': pynput.keyboard.Key.f18, 'Key.f19': pynput.keyboard.Key.f19, 'Key.f20': pynput.keyboard.Key.f20, 'Key.home': pynput.keyboard.Key.home, 'Key.left': pynput.keyboard.Key.left, 'Key.page_down': pynput.keyboard.Key.page_down, 'Key.page_up': pynput.keyboard.Key.page_up, 'Key.right': pynput.keyboard.Key.right, 'Key.shift': pynput.keyboard.Key.shift, 'Key.shift_l': pynput.keyboard.Key.shift_l, 'Key.shift_r': pynput.keyboard.Key.shift_r, 'Key.space': pynput.keyboard.Key.space, 'Key.tab': pynput.keyboard.Key.tab, 'Key.up': pynput.keyboard.Key.up, 'Key.insert': pynput.keyboard.Key.insert, 'Key.menu': pynput.keyboard.Key.menu, 'Key.num_lock': pynput.keyboard.Key.num_lock, 'Key.pause': pynput.keyboard.Key.pause, 'Key.print_screen': pynput.keyboard.Key.print_screen, 'Key.scroll_lock': pynput.keyboard.Key.scroll_lock } def set_mouse_coordinates(self, x, y): # 设置鼠标坐标 self.mouse.position = (x, y) def mouse_move_scroll(self, x, y): # 鼠标滚轮 self.mouse.scroll(x, y) # 滚动鼠标 def mouse_move(self, x, y): # 监听鼠标移动 happen_time = time.time() self.time_order.append(happen_time) time_index = self.time_order.index(happen_time) if time_index != 0: sleep_time = happen_time - self.time_order[time_index - 1] else: sleep_time = 0 self.mouse_keyboard_move.append((x, y, sleep_time)) def mouse_right_click(self, x, y, key, state): happen_time = time.time() self.time_order.append(happen_time) time_index = self.time_order.index(happen_time) if time_index != 0: sleep_time = happen_time - self.time_order[time_index - 1] else: sleep_time = 0 self.mouse_keyboard_move.append((x, y, key, state, sleep_time)) def mouse_click(self, x, y, button, pressed): # 监听鼠标点击 if pressed: if button == pynput.mouse.Button.left: self.mouse_right_click(x, y, 'left', 'pressed') elif button == pynput.mouse.Button.middle: self.mouse_right_click(x, y, 'middle', 'pressed') elif button == pynput.mouse.Button.right: self.mouse_right_click(x, y, 'right', 'pressed') else: if button == pynput.mouse.Button.left: self.mouse_right_click(x, y, 'left', 'release') elif button == pynput.mouse.Button.middle: self.mouse_right_click(x, y, 'middle', 'release') elif button == pynput.mouse.Button.right: self.mouse_right_click(x, y, 'right', 'release') def mouse_scroll(self, x, y, dx, dy): # 监听鼠标滚轮 happen_time = time.time() self.time_order.append(happen_time) time_index = self.time_order.index(happen_time) if time_index != 0: sleep_time = happen_time - self.time_order[time_index - 1] else: sleep_time = 0 self.mouse_keyboard_move.append((x, y, 'middle', dx, dy * 50, sleep_time)) def listener_mouse(self): # 监听鼠标、键盘 self.mouse_listener = pynput.mouse.Listener(on_move=self.mouse_move, on_click=self.mouse_click, on_scroll=self.mouse_scroll) self.keyboard_listener = pynput.keyboard.Listener(on_press=self.keyboard_input_press, on_release=self.keyboard_input_release) self.mouse_listener.start() self.keyboard_listener.start() self.mouse_listener.join() self.keyboard_listener.join() return def keyboard_input_press(self, key): # 按键按下 happen_time = time.time() self.time_order.append(happen_time) time_index = self.time_order.index(happen_time) if time_index != 0: sleep_time = happen_time - self.time_order[time_index - 1] else: sleep_time = 0 self.mouse_keyboard_move.append((str(key), True, sleep_time)) def keyboard_input_release(self, key): # 按键释放 happen_time = time.time() self.time_order.append(happen_time) time_index = self.time_order.index(happen_time) if time_index != 0: sleep_time = happen_time - self.time_order[time_index - 1] else: sleep_time = 0 self.mouse_keyboard_move.append((str(key), False, sleep_time)) if key == pynput.keyboard.Key.esc: self.stop_listener_keyoard() with open('aa.txt', "w") as f: for i in self.mouse_keyboard_move: f.write(str(i) + '\n') f.close() def stop_listener_keyoard(self): pynput.keyboard.Listener.stop(self.keyboard_listener) pynput.mouse.Listener.stop(self.mouse_listener) def click_mouse_press(self, x, y, keys): self.set_mouse_coordinates(x, y) if keys == 'left': self.mouse.press(pynput.mouse.Button.left) elif keys == 'right': self.mouse.press(pynput.mouse.Button.right) elif keys == 'middle': self.mouse.press(pynput.mouse.Button.middle) def click_mouse_release(self, x, y, keys): self.set_mouse_coordinates(x, y) if keys == 'left': self.mouse.release(pynput.mouse.Button.left) elif keys == 'right': self.mouse.release(pynput.mouse.Button.right) elif keys == 'middle': self.mouse.release(pynput.mouse.Button.middle) def playback(self): with open('aa.txt', "r") as f: for line in f.readlines(): double_list = re.findall(r'[A-Za-z0-9._/;\[\]\\\=\-\`]+', line) print(double_list) if 'pressed' in line: time.sleep(float(double_list[4])) self.click_mouse_press(int(double_list[0]), int(double_list[1]), double_list[2]) elif 'release' in line: time.sleep(float(double_list[4])) self.click_mouse_release(int(double_list[0]), int(double_list[1]), double_list[2]) elif 'middle' in line: time.sleep(float(double_list[5])) self.mouse_move_scroll(int(double_list[3]), int(double_list[4])) elif 'Key' in line: if 'Key.esc' in line: pass else: if 'True' in line: self.keyboard_press_key(self.default_keys[double_list[0]]) if 'False' in line: self.keyboard_release_key(self.default_keys[double_list[0]]) else: if 'True' in line: self.keyboard_press_key(double_list[0]) elif 'False' in line: self.keyboard_release_key(double_list[0]) else: time.sleep(0.005) self.set_mouse_coordinates(int(double_list[0]), int(double_list[1])) def keyboard_press_key(self, word): self.keyboard.press(word) # 按下 def keyboard_release_key(self, word): self.keyboard.release(word) # 松开 def listener_all(self): thread_obj = threading.Thread(target=A.listener_mouse) thread_obj.start() if __name__ == '__main__': A = ControlMouseKeyboard() # A.listener_all() # A.playback()
今天状态不怎么好,直接上代码了。有兴趣的可以了解下
以前-好记性不如烂笔头
现在-好记性不如烂键盘