zoukankan      html  css  js  c++  java
  • 键盘及鼠标记录程序

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

  • 相关阅读:
    for ,foreach ,map 循环的区别
    PHP生成验证码图片
    Google自动打印
    MYSQL定时任务
    PHP 多维数组将下标从0开始
    MYSQL常用函数
    PHP 手机短信发送验证码
    php 限制标题长度,将一个中文转换成一个字符
    MYSQL 模糊查询
    MYSQL AND 和 OR
  • 原文地址:https://www.cnblogs.com/mafu/p/15470866.html
Copyright © 2011-2022 走看看