You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下用Python3实现特定应用的全局热键控制

实现全局热键控制特定应用的Python方案

刚好你拆分的三个任务逻辑非常清晰,我直接给你一套可运行的实现方案,完全满足「无需目标应用焦点」的核心需求:

1. 全局按键监控:用pynput实现无焦点监听

要捕获系统级的按键操作(无需目标应用处于焦点),pynput是最省心的选择——它的GlobalHotKeys类可以直接绑定组合热键,比手动监听单个按键状态更可靠,还能避免误触发的问题。

2. 热键与目标按键的匹配

我们可以用一个字典来存储热键和待发送按键的映射关系,后续扩展新的热键只需要在字典里加键值对就行,维护起来特别方便。比如你需要的Ctrl+F3对应Ctrl+A,直接写进字典即可。

3. 向特定应用发送按键:用pywinauto实现无焦点输入

pywinauto确实是这部分的最佳工具,它能直接连接到目标进程的窗口对象,哪怕窗口在后台或最小化,也能精准发送按键指令。关键是要正确定位到目标应用的主窗口,再调用它的键盘输入方法。

完整代码示例

from pynput import keyboard
from pywinauto import Application

# 定义热键映射:键是全局触发的热键,值是要发送给目标应用的按键(遵循pywinauto语法)
hotkey_mapping = {
    "<ctrl>+f3": "^a"  # ^代表Ctrl,所以^a就是Ctrl+A
}

# 获取目标应用的窗口对象(这里以Notepad.exe为例)
def get_target_window():
    try:
        # 通过进程路径连接记事本,比按标题查找更稳定
        app = Application().connect(path="notepad.exe")
        # 返回应用的主窗口
        return app.top_window()
    except Exception as e:
        print(f"找不到记事本应用,请先打开它: {e}")
        return None

# 热键触发后的执行逻辑
def trigger_key_send():
    target_win = get_target_window()
    if target_win:
        # 向目标窗口发送指定按键,无需窗口处于焦点
        target_win.send_keys(hotkey_mapping["<ctrl>+f3"])
        print("已向记事本发送Ctrl+A指令")

# 启动全局热键监听
def start_listener():
    with keyboard.GlobalHotKeys({
        "<ctrl>+f3": trigger_key_send
    }) as listener:
        listener.join()

if __name__ == "__main__":
    print("全局热键监控已启动,按下Ctrl+F3即可向后台记事本发送Ctrl+A...")
    start_listener()

关键注意点

  • 先安装依赖库:pip install pynput pywinauto
  • 确保目标应用(记事本)已经启动,否则脚本会提示找不到应用
  • pywinauto的按键语法:^代表Ctrl,%代表Alt,+代表Shift,普通按键直接写字符(比如"b"就是按B键)
  • 如果需要扩展更多热键,只需在hotkey_mapping里添加新的键值对,同时在GlobalHotKeys中注册对应的回调函数就行

这个脚本运行后,不管你当前焦点在哪个应用,按下Ctrl+F3都会给后台的记事本发送全选指令,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Sona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:25:39