这里主要是记录一个库-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资源的时候肯定知道电脑有异常!