關注公衆號:「Python專欄」,後臺回覆「小姐姐」,獲取全套代碼!!!python
還記得曾經爲了刷大話西遊而下載了按鍵精靈,而後論壇上搜了各類分辨率的腳本麼?函數
還記得春節爲了刷回家的高鐵票,本身寫了按鍵精靈的腳本麼?spa
如今python有一個神奇的庫,咱們不用再去模擬複雜的按鍵精靈了!監控鼠標、鍵盤,甚至是……線程
pynput這個庫讓你能夠控制和監控輸入設備。code
對於每一種輸入設備,它包含一個子包來控制和監控該種輸入設備:blog
pynput.mouse:包含控制和監控鼠標或者觸摸板的類。事件
pynput.keyboard:包含控制和監控鍵盤的類。回調函數
上面提到的子包都已被引入到pynput庫中。要使用上面的子包,從pynput中引入便可。it
from pynput import mouse, keyboard
io
接下來就跟着小胖一塊兒來看下如何玩轉鼠標和鍵盤吧。
使用pynput.mouse控制鼠標
from pynput.mouse import Controller, Button mouse = Controller() # 獲取當前鼠標位置 print(f'當前小胖的鼠標位置是: {mouse.position}') # 設置鼠標位置 mouse.position = (10, 20) print(f'如今小胖把鼠標移動到 {mouse.position}') # 使用相對距離,移動當前鼠標 mouse.move(5, -5) # 按下鼠標左鍵,釋放鼠標左鍵 mouse.press(Button.left) mouse.release(Button.left) # 向下滾動2格 mouse.scroll(0, 2)
效果如圖
使用pynput.mouse.Listener監控鼠標事件
from pynput import mouse def on_move(x, y): print(f'鼠標移動到座標 {(x, y)}') def on_click(x, y, button, pressed): print(f"{'按下' if pressed else '釋放'} ,當前位置是: {(x, y)}") if not pressed: # 中止監聽 return False def on_scroll(x, y, dx, dy): print(f"滑動鼠標, {'向下' if dy < 0 else '向上'} at {(x, y)}") # 一直監聽事件,直到鼠標釋放 with mouse.Listener( on_move=on_move, on_click=on_click, on_scroll=on_scroll) as listener: listener.join()
效果如圖
鼠標事件監聽器是一個線程,全部的回調函數都會在獨立的線程中運行。
調用pynput.mouse.Listener.stop,發起StopException異常,或者回調函數中返回False都會中止事件的監聽。
使用pynput.keyboard.Controller控制鍵盤
from pynput.keyboard import Key, Controller keyboard = Controller() # 按下並釋放空格 keyboard.press(Key.space) keyboard.release(Key.space) # 按下並釋放小寫字母a keyboard.press('a') keyboard.release('a') # 2種方式輸入大寫A keyboard.press('A') keyboard.release('A') with keyboard.pressed(Key.shift): keyboard.press('a') keyboard.release('a') # 直接操做鍵盤輸入Hello World keyboard.type('Hello World')
使用pynput.keyboard.Listener監聽鍵盤事件
from pynput import keyboard def on_press(key): try: print(f'字母 {key.char} 被按下了') except AttributeError: print(f'特殊的鍵 {key} 被按下了') def on_release(key): print(f'{key} 被釋放了') if key == keyboard.Key.esc: # 中止監聽 return False # 一直監聽鍵盤事件,直到中止 with keyboard.Listener( on_press=on_press, on_release=on_release) as listener: listener.join()
鍵盤事件監聽器是一個線程,全部的回調函數都會在獨立的線程中運行。
調用pynput.keyboard.Listener.stop,發起StopException異常,或者回調函數中返回False都會中止事件的監聽。
傳遞給回調函數的key參數是一個pynput.keyboard.Key類的實例。當特殊按鍵和普通按鍵一塊兒按下時,數字字母按鍵的值會被放置在pynput.keyboard.KeyCode類的實例中,對於不知道的按鍵會返回None。
接下來就是發揮大家能力的時候了,說不定寫個腳本,用exe包裝一下,命名爲種子收發器?哈哈哈哈,而後就能夠監聽起來了?