這里主要是記錄一個庫-pynput。 並不是教做壞事。使用Python的庫對鼠標和鍵盤進行記錄,pygame也可以記錄,但是對於主需腰針對鍵盤和鼠標進行記錄,就很笨重。
首先對鍵盤進行記錄:
"""
python對鍵盤進行監控
"""
from pynput import keyboard
def on_press(key): # 鍵盤上的鍵被按下
print(f'{key} : 被按下了!')
def on_release(key): # 鍵盤上的鍵被松開
# print(f'{key} : 被松開了!')
# 結束程序的按鍵
if key == keyboard.Key.esc: # 如果按下esc鍵,我們結束記錄
return False
with keyboard.Listener(on_press=on_press, on_release=on_release) as listner:
listner.join()
程序運行后的截圖:

其次是對鼠標進行記錄:
from pynput import mouse
def on_click(x, y, button, pressed):
# 左鍵
if button == mouse.Button.left:
print('左鍵被點擊了!') # 會被打印兩次,按下和彈起都會各打印一次
# 右鍵
elif button == mouse.Button.right:
print('郵件被點擊了!') # 原則上講只是打印按下
return False # 這里才是彈起
# 鼠標中鍵
else:
print('鼠標中鍵被點擊了!') # 只是按下
return False # 彈起
# 檢測事件
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('20211027.log') # 我一般以時間定義
# 鍵盤事件
def on_press(key):
logger.debug(f'{key} : 被敲擊了!')
def on_release(key):
# print(f'{key} : 被釋放了!')
# 如果敲擊了esc鍵,就退出
if key == keyboard.Key.esc:
return False
# 鼠標事件
def on_click(x, y, button, pressed):
# 鼠標左鍵
if button == mouse.Button.left:
logger.debug('鼠標左鍵被敲擊了!')
elif button == mouse.Button.right:
logger.debug('鼠標右鍵被敲擊了!')
return False
else:
logger.debug('鼠標中鍵被敲擊了!')
# 開啟第一個線程用於記錄鍵盤操作
def threadFirst():
with keyboard.Listener(on_press=on_press, on_release=on_release) as lsn:
lsn.join()
# 開啟第二個線程用於記錄鼠標操作
def threadSecond():
with mouse.Listener(on_click=on_click) as listner:
listner.join()
if __name__ == "__main__":
# 啟動兩個線程
t1 = Thread(target=threadFirst)
t2 = Thread(target=threadSecond)
t1.start() # 啟動第一個線程
t2.start() # 啟動第二個線程
日志文件會被保存在當前文件夾下。經過上述處理,所有的鍵盤和鼠標記錄都會被記錄在日志文件里,后面只需要經過NLTK還原一下場景就行了。
再次申明:此程序會占用cpu大量的資源,別拿去做壞事。有常識的人在自己電腦被占用大量cpu資源的時候肯定知道電腦有異常!
