Python通过keyboard库实现模拟和监听键盘

 更新时间:2024年10月31日 09:40:44   作者:仙草哥哥  
这篇文章主要为大家详细介绍了Python如何通过keyboard库实现模拟和监听键盘,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

keyboard介绍

如果我们想要通过快捷键,来调用某段代码,我们可以使用python的keyboard库,这个库可以用于发送,挂钩,以及模拟键盘事件等,并且同时支持多种操作系统(但是需要注意的是,在某些系统中,需要以管理员的权限运行才可以使用)

当我们使用这个库的时候,可以:

  • 监听键盘事件:监听全局键盘事件,包括捕获特定键的按下或释放,记录所有键盘输入(这个功能可能很危险,需要小心使用)。
  • 模拟按键输入:模拟按键事件,如按下,释放,或者同时按下多个键等。
  • 热键和快捷键:可以设置热键或快捷键,来执行特定的回调函数。

安装keyboard库,同样需要使用pip:pip install keyboard

keyboard库github地址

keyboard使用

监听所有键盘输入

import keyboard
 
def log_keystroke(event):
    print(f"Key {event.name} {'被按下' if event.event_type == 'down' else '被释放'}")
 
keyboard.hook(log_keystroke)
 
# 使用esc键来停止监听
keyboard.wait("esc")

可以看到,现在我们所有的按键都会被清清楚楚的记录下来

监听并回放键盘输入

这个功能允许我们先输入内容,然后将所有的输入内容全部记录下来,然后再需要的时候,重新回放(也就是再模拟输入一次)

import keyboard
import time
 
# 记录按键
keyboard.start_recording()
 
# 设置记录10秒的键盘输入
time.sleep(10)
 
events = keyboard.stop_recording()
 
# 回放记录的按键
keyboard.play(events)
监听特定键的按下和释放
import keyboard
 
def on_press_reaction(event):
    if event.name == "b":
        print("你为什么要按b?")
 
 
keyboard.on_press(on_press_reaction)
 
keyboard.wait("esc")

监听按键按下:keyboard.on_press()

监听按键释放:keyboard.on_release()

设置热键

import keyboard
 
def print_message():
    print("你为什么要召唤我?")
 
# 设置热键,例如alt+b
keyboard.add_hotkey("alt+b", print_message)
 
keyboard.wait("esc")

添加热键:keyboard.add_hotkey()

清除所有的热键:keyboard.clear_all_hotkeys()

阻止程序直到按键:keyboard.wait("esc")

模拟输入

模拟文字输入:keyboard.write()

模拟按键按下:keyboard.press()

模拟按键释放:keyboard.release()

模拟按键按下并释放:keyboard.send()

实际例子

插入时间信息

一些输入法可能包含一个功能,可以快速插入一段时间信息,例如,将当前时间2024-10-30 22:00:00插入到文章中。

import keyboard
import datetime
 
 
def write_timestamp():
    current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    
    keyboard.write(current_time)
 
keyboard.add_hotkey("ctrl+b", write_timestamp)
keyboard.wait("esc")

当然,我们可以对其进行扩展,插入更多的信息,例如,在写文章的时候,同时插入作者信息,联系方式等

import keyboard
import datetime
 
 
def write_info(name, mail):
    current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    
    info = f"作者:{name}\n联系方式:{mail}\n创建时间:{current_time}"
    
    keyboard.write(info)
 
keyboard.add_hotkey("ctrl+b", lambda: write_info("sagegrass", "sagegrass@outlook.com"))
keyboard.wait("esc")

以下信息就是通过按键快速生成的,并非是我手动输入的

在设置热键的时候,一定要注意与原本的快捷键冲突,如果设置的热键冲突,即使程序正确,也可能无法运行,甚至可能因为冲突按键造成许多麻烦。

专注模式

原理:通过热键,操作写入hosts文件,将指定的网站重定向到127.0.0.1,以实现无法访问。再次按下以后,清除这些信息,从而实现继续访问。

 注意,写入hosts以后,不一定能够立即生效,可能需要一定时间的延迟。

import keyboard
import os
 
# 工作期间拒绝玩小游戏
blocked_websites = [
    "4399.com",
    "www.4399.com"
]
hosts_path = r"C:\Windows\System32\drivers\etc\hosts"
redirect_ip = "127.0.0.1"
is_focus_mode_on = False
 
 
def toggle_focus_mode():
    global is_focus_mode_on
    if not is_focus_mode_on:
        with open(hosts_path, "a") as file:
            for website in blocked_websites:
                file.write(f"{redirect_ip} {website}\n")
        print("专注模式已开启,干扰网站已被屏蔽。")
        is_focus_mode_on = True
    else:
        with open(hosts_path, "r+") as file:
            lines = file.readlines()
            file.seek(0)
            for line in lines:
                if not any(website in line for website in blocked_websites):
                    file.write(line)
            file.truncate()
        print("专注模式已关闭,干扰网站可正常访问。")
        is_focus_mode_on = False
 
keyboard.add_hotkey("ctrl+b", toggle_focus_mode)
keyboard.wait("esc")

风险提示

需要注意的是,由于keyboard库可以实现如读取键盘输入,模拟键盘按键等特殊性质的功能,因此存在一些隐私和安全的风险,需要小心谨慎。

比如说,使用keyboard,可能存在恶意软件的风险,比如说,该库可以用于开发键盘记录器,也就是人们常说的keylogger,这样类型的恶意软件能够记录用户的键盘输入,包括密码或者其他的敏感信息。

因此,我们需要注意:

  • 作为使用者,当使用有包含keyboard库的程序时,要确保代码来源的可靠性,避免使用来历不明的python程序。
  • 作为开发者,我们也需要保证用户的隐私和知情权,要告知软件的行为和权限,更不能尝试去制作和传播键盘记录器。

以上就是Python通过keyboard库实现模拟和监听键盘的详细内容,更多关于Python keyboard模拟和监听键盘的资料请关注脚本之家其它相关文章!

相关文章

  • python实现红包裂变算法

    python实现红包裂变算法

    这篇文章主要介绍了python实现红包裂变算法的相关资料,需要的朋友可以参考下
    2016-02-02
  • 对Python3+gdal 读取tiff格式数据的实例讲解

    对Python3+gdal 读取tiff格式数据的实例讲解

    今天小编就为大家分享一篇对Python3+gdal 读取tiff格式数据的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python使用matplotlib和pandas实现的画图操作【经典示例】

    Python使用matplotlib和pandas实现的画图操作【经典示例】

    这篇文章主要介绍了Python使用matplotlib和pandas实现的画图操作,结合实例形式分析了Python基于matplotlib和pandas的数值运算与图形显示操作相关实现技巧,并对部分代码的图形显示进行了显示效果测试,需要的朋友可以参考下
    2018-06-06
  • python try 异常处理(史上最全)

    python try 异常处理(史上最全)

    为了处理异常,我们使用try...except,这篇文章主要介绍了python try 异常处理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • python strip() 函数和 split() 函数的详解及实例

    python strip() 函数和 split() 函数的详解及实例

    这篇文章主要介绍了 python strip() 函数和 split() 函数的详解及实例的相关资料,需要的朋友可以参考下
    2017-02-02
  • python的移位操作实现详解

    python的移位操作实现详解

    这篇文章主要介绍了ppython的移位操作实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • python中列表添加的四种方法小结

    python中列表添加的四种方法小结

    这篇文章主要介绍了python中列表添加的四种方法小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • django实现图片上传数据库并显示

    django实现图片上传数据库并显示

    这篇文章主要为大家详细介绍了django实现图片上传数据库并显示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Python之re模块案例详解

    Python之re模块案例详解

    这篇文章主要介绍了Python之re模块案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Keras使用预训练模型迁移学习单通道灰度图像详解

    Keras使用预训练模型迁移学习单通道灰度图像详解

    这篇文章主要介绍了Keras使用预训练模型迁移学习单通道灰度图像详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02

最新评论