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

Windows关机重启后显示通知的Python实现问题求助

Windows关机重启后显示通知的Python实现问题求助

我想做一个功能:在Windows使用shutdown \s \hybrid命令关机后,下次开机时给用户显示一条消息。我借助AI写了一段代码,手动双击生成的脚本能正常弹出消息,但任务计划好像创建失败了,实在找不到问题出在哪,想请教大家怎么实现关机重启后的通知功能。

我的代码尝试如下:

import os


def leave_message_on_startup(message):
    script_content = f"""
import pymsgbox

message = "{message}"
pymsgbox.alert(message, "Startup Message")
"""

    dirname = os.path.dirname
    script_path = f"{dirname(dirname(dirname(__file__)))}\\temp\\DisplayMessageOnStartup.pyw"
    os.makedirs("temp", exist_ok=True)
    with open(script_path, "w+") as script_file:
        script_file.write(script_content)

    create_task_command = f'schtasks /create /tn "{task_name}" /tr "py {script_path}" /sc onstart /f'
    os.system(create_task_command)

def trigger_task(task_name):
    trigger_task_command = f'schtasks /run /tn "{task_name}"'
    os.system(trigger_task_command)


task_name = "DisplayMessageOnStartup"
message = "Sample message"
leave_message_on_startup(message)
trigger_task(task_name)

运行代码后,手动打开生成的脚本是能正常工作的,但任务计划要么创建失败,要么创建了也不生效,希望大家帮忙指点下可行的实现思路和代码改进方向。


可能的问题点及改进方案

  • 权限不足:schtasks /create需要管理员权限才能创建开机任务,普通用户运行脚本大概率会失败。建议右键以管理员身份启动你的Python脚本,这是最直接的解决方式。
  • 路径不稳定:你用dirname(dirname(dirname(__file__)))拼接路径,在脚本位置变化或打包后容易出错。建议改用绝对路径,比如基于用户目录生成稳定路径:
    script_dir = os.path.join(os.path.expanduser("~"), "StartupMessageTemp")
    os.makedirs(script_dir, exist_ok=True)
    script_path = os.path.join(script_dir, "DisplayMessageOnStartup.pyw")
    
  • Python解释器路径问题:py {script_path}可能因环境变量配置问题导致任务找不到Python。建议用当前运行的Python解释器绝对路径,避免依赖系统环境:
    import sys
    python_exe = sys.executable
    # 给路径加引号,避免空格导致命令解析错误
    create_task_command = f'schtasks /create /tn "{task_name}" /tr "\"{python_exe}\" \"{script_path}\"" /sc onstart /f'
    
  • 任务的用户上下文:默认创建的任务可能在系统账户下运行,而pymsgbox需要GUI环境,系统账户没有桌面所以看不到弹窗。可以指定当前用户运行任务:
    create_task_command = f'schtasks /create /tn "{task_name}" /tr "\"{python_exe}\" \"{script_path}\"" /sc onstart /ru "%USERNAME%" /f'
    
  • 错误排查技巧:可以捕获任务创建的返回码或日志,定位具体错误:
    # 打印返回码,0为成功,非0为失败
    result = os.system(create_task_command)
    print(f"任务创建返回码: {result}")
    # 或者把命令输出保存到日志文件
    os.system(f'{create_task_command} > task_create_log.txt 2>&1')
    

更简单的替代方案

除了任务计划,还可以把脚本放到Windows启动文件夹:

  • 用户启动文件夹路径:C:\Users\<你的用户名>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
  • 系统启动文件夹路径:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

直接把生成的.pyw脚本(或其快捷方式)复制到用户启动文件夹,开机登录后就会自动运行脚本弹出消息,这种方法不需要管理员权限,操作更简单。

备注:内容来源于stack exchange,提问作者Electron X

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:13:09