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