Python通过keyboard库实现模拟和监听键盘
作者:仙草哥哥
keyboard介绍
如果我们想要通过快捷键,来调用某段代码,我们可以使用python的keyboard库,这个库可以用于发送,挂钩,以及模拟键盘事件等,并且同时支持多种操作系统(但是需要注意的是,在某些系统中,需要以管理员的权限运行才可以使用)
当我们使用这个库的时候,可以:
- 监听键盘事件:监听全局键盘事件,包括捕获特定键的按下或释放,记录所有键盘输入(这个功能可能很危险,需要小心使用)。
- 模拟按键输入:模拟按键事件,如按下,释放,或者同时按下多个键等。
- 热键和快捷键:可以设置热键或快捷键,来执行特定的回调函数。
安装keyboard库,同样需要使用pip:pip install keyboard
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模拟和监听键盘的资料请关注脚本之家其它相关文章!