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

创建全局热键:不切换窗口自动输入文本文件内容的问题

全局热键触发无焦点模拟输入解决方案

问题分析

当前通过批处理/快捷方式触发脚本时,会因控制台窗口抢夺焦点导致输入失效,且之前的热键监听方案存在高CPU占用问题。核心需求是事件驱动的轻量全局热键+直接向当前活动窗口发送输入,完全不切换焦点。

优化后的Python脚本

先安装依赖:

pip install keyboard pywin32

脚本代码:

import keyboard
import win32gui
import win32api
import win32con
import time

def read_command_text():
    try:
        with open("commandText.txt", "r", encoding="utf-8") as f:
            return f.read()
    except FileNotFoundError:
        return ""

def send_text_to_window(hwnd, text):
    # 逐字符向目标窗口发送按键消息
    for char in text:
        win32api.SendMessage(hwnd, win32con.WM_CHAR, ord(char), 0)
        time.sleep(0.01)  # 模拟正常输入间隔,避免应用处理过载

def on_hotkey_triggered():
    # 获取当前处于焦点的窗口句柄
    active_window = win32gui.GetForegroundWindow()
    input_text = read_command_text()
    if input_text and active_window:
        send_text_to_window(active_window, input_text)

# 注册全局热键(示例为Ctrl+Shift+X,可自行修改)
keyboard.add_hotkey('ctrl+shift+x', on_hotkey_triggered)

# 事件驱动等待,CPU占用极低
keyboard.wait()

关键改进点

  • 轻量热键监听:用keyboard.add_hotkey实现事件驱动的全局热键,无需轮询,CPU占用几乎可以忽略
  • 无焦点输入:通过Windows API直接向当前活动窗口发送字符消息,完全不切换焦点,也不会弹出控制台窗口
  • 安全文件处理:用with语句自动管理文件句柄,避免资源泄漏

避免控制台窗口的方法

如果直接运行.py脚本会弹出控制台(抢夺焦点),可以用以下两种方式解决:

  1. 改用Pythonw运行:把脚本后缀改为.pyw,创建快捷方式指向pythonw.exe your_script.pyw,运行时无控制台窗口
  2. 打包成无控制台EXE:用PyInstaller打包:
    pyinstaller --onefile --windowed your_script.py
    
    打包后的EXE运行时完全无界面,不会干扰任何窗口焦点

注意事项

  • 热键可自行修改,避免与其他软件的快捷键冲突
  • 若目标应用无法接收WM_CHAR消息,可尝试替换为发送WM_KEYDOWN+WM_KEYUP消息(需调整send_text_to_window函数)
  • 部分系统级应用或游戏可能需要管理员权限运行脚本,若输入失效,右键以管理员身份启动即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:55:27