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

任务计划程序运行pywinauto脚本触发Webex键盘输入RuntimeError

解决Windows任务计划定时运行pywinauto脚本的SendInput错误

问题根源

定时触发任务计划时,脚本大概率跑在无交互的后台会话里。type_keys依赖的SendInput API需要当前会话有活跃的桌面交互环境,还得让目标窗口拿到焦点。手动点运行或立即执行任务时,会话处于活跃状态,满足条件所以正常;定时运行时没这个环境,就触发了键盘事件插入失败的错误。

可行解决方案

1. 调整任务计划的交互权限配置

  • 打开任务计划程序,找到你的任务右键选「属性」
  • 「常规」选项卡:勾选「不管用户是否登录都要运行」,同时必须勾选「使用最高权限运行」
  • 「设置」选项卡:勾选「允许任务在按需运行时唤醒计算机」(如果定时时间电脑可能休眠的话)
  • 「条件」选项卡:取消勾选「只有在计算机使用交流电源时才启动此任务」(避免电源状态限制脚本运行)

2. 切换pywinauto的输入模式

放弃依赖桌面焦点的SendInput,改用后台输入方式:

from pywinauto.application import Application

# 用uia后端初始化应用,支持后台输入
app = Application(backend="uia").connect(title="Webex窗口标题")
main_dlg = app.window(title="Webex窗口标题")
# 用send_keys替代type_keys,无需窗口焦点也能输入
main_dlg.send_keys("要发送的消息内容", with_spaces=True, with_newlines=True)

也可以直接用win32api模拟键盘输入(需先确保窗口激活):

import win32api
import win32con

# 获取Webex窗口句柄(假设已通过pywinauto拿到main_dlg)
hwnd = main_dlg.handle
# 先激活窗口
win32api.SetForegroundWindow(hwnd)
# 逐字符模拟输入
for char in "测试消息":
    win32api.keybd_event(ord(char), 0, 0, 0)
    win32api.keybd_event(ord(char), 0, win32con.KEYEVENTF_KEYUP, 0)

3. 确保脚本运行时目标窗口可用

  • 脚本开头加延迟,给Webex足够的加载时间:
import time
time.sleep(5)  # 可根据实际启动速度调整时长
  • 增加窗口存在性检查,避免找不到窗口的情况:
if not main_dlg.exists():
    # 窗口不存在时重启Webex
    import subprocess
    subprocess.Popen("C:\\实际路径\\Webex.exe")
    time.sleep(10)
    app = Application(backend="uia").connect(title="Webex窗口标题")
    main_dlg = app.window(title="Webex窗口标题")

4. 修正批处理的日志路径(可选)

把日志文件改成绝对路径,防止定时运行时找不到输出位置:

set LOGFILE=C:\automation\dash_check_log.txt
"C:\Users\AppData\Local\Programs\Python\Python312-32\python.exe" "C:\automation\dash_check_v1.py"  > %LOGFILE% 2>&1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:23:19