用脚本定时弹出提醒并记录

wen 实用脚本 1

本文目录导读:

用脚本定时弹出提醒并记录

  1. 方案一:Python版本(跨平台)
  2. 方案二:Windows专用 - VBScript版本
  3. 使用说明
  4. 功能特点
  5. 日志文件示例
  6. 高级配置(可选)

我来为您设计一个定时弹出提醒并记录的脚本方案,根据您的需求,我提供两个版本:

Python版本(跨平台)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
定时提醒脚本 - 支持Windows/Mac/Linux
"""
import time
import threading
import tkinter as tk
from tkinter import messagebox
import json
import os
from datetime import datetime
class ReminderScheduler:
    def __init__(self):
        self.reminders = []
        self.log_file = "reminder_log.json"
        self.load_reminders()
    def load_reminders(self):
        """加载提醒任务"""
        if os.path.exists(self.log_file):
            try:
                with open(self.log_file, 'r', encoding='utf-8') as f:
                    self.reminders = json.load(f)
            except:
                self.reminders = []
    def save_reminders(self):
        """保存提醒任务"""
        with open(self.log_file, 'w', encoding='utf-8') as f:
            json.dump(self.reminders, f, ensure_ascii=False, indent=2)
    def add_reminder(self, message, interval_minutes):
        """添加提醒"""
        reminder = {
            'message': message,
            'interval': interval_minutes,
            'next_time': time.time() + interval_minutes * 60,
            'created_at': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        }
        self.reminders.append(reminder)
        self.save_reminders()
    def show_reminder(self, message):
        """显示提醒窗口"""
        root = tk.Tk()
        root.withdraw()  # 隐藏主窗口
        # 创建自定义对话框
        dialog = tk.Toplevel(root)
        dialog.title("⏰ 提醒")
        dialog.geometry("300x150")
        dialog.attributes('-topmost', True)  # 置顶
        # 显示消息
        label = tk.Label(dialog, text=message, font=("微软雅黑", 12), 
                        wraplength=250, pady=20)
        label.pack()
        # 按钮
        button = tk.Button(dialog, text="我知道了", 
                          command=lambda: self.on_acknowledge(dialog, message))
        button.pack(pady=10)
        dialog.protocol("WM_DELETE_WINDOW", lambda: self.on_acknowledge(dialog, message))
        dialog.transient(root)
        dialog.grab_set()
        root.mainloop()
    def on_acknowledge(self, dialog, message):
        """记录确认时间"""
        with open("reminder_records.txt", "a", encoding='utf-8') as f:
            record_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
            f.write(f"[确认] {record_time} - {message}\n")
        dialog.destroy()
        dialog.quit()
    def run_scheduler(self):
        """运行调度器"""
        print("⏰ 定时提醒系统已启动...")
        print("按 Ctrl+C 退出")
        while True:
            current_time = time.time()
            for reminder in self.reminders:
                if current_time >= reminder['next_time']:
                    print(f"\n🔔 提醒: {reminder['message']}")
                    self.show_reminder(reminder['message'])
                    reminder['next_time'] = current_time + reminder['interval'] * 60
                    self.save_reminders()
            time.sleep(30)  # 每30秒检查一次
def main():
    scheduler = ReminderScheduler()
    # 添加默认提醒(根据需求修改)
    # scheduler.add_reminder("该喝水了!", 30)  # 每30分钟提醒喝水
    # scheduler.add_reminder("休息一下眼睛", 45)  # 每45分钟提醒休息
    # scheduler.add_reminder("伸展一下身体", 60)  # 每60分钟提醒运动
    # 启动调度器
    try:
        scheduler.run_scheduler()
    except KeyboardInterrupt:
        print("\n⏹ 提醒系统已停止")
        scheduler.save_reminders()
if __name__ == "__main__":
    main()

Windows专用 - VBScript版本

' reminder.vbs
' 定时提醒脚本 - Windows专用
Option Explicit
Dim ws, fso, logFile
Set ws = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
logFile = "ReminderLog.txt"
' 提醒间隔(分钟)
Const WATER_INTERVAL = 30
Const EYE_INTERVAL = 45
Const STRETCH_INTERVAL = 60
' 上次提醒时间
Dim lastWater, lastEye, lastStretch
lastWater = Now
lastEye = Now
lastStretch = Now
' 主循环
Do While True
    ' 检查是否需要提醒
    If DateDiff("n", lastWater, Now) >= WATER_INTERVAL Then
        Call ShowReminder("💧 该喝水了!已经" & WATER_INTERVAL & "分钟了")
        lastWater = Now
    End If
    If DateDiff("n", lastEye, Now) >= EYE_INTERVAL Then
        Call ShowReminder("👀 休息一下眼睛,远眺5分钟")
        lastEye = Now
    End If
    If DateDiff("n", lastStretch, Now) >= STRETCH_INTERVAL Then
        Call ShowReminder("🧘 站起来伸展一下身体")
        lastStretch = Now
    End If
    ' 每30秒检查一次
    WScript.Sleep 30000
Loop
Sub ShowReminder(message)
    ' 记录日志
    Call WriteLog("提醒: " & message)
    ' 显示消息框
    Dim result
    result = MsgBox(message & vbCrLf & vbCrLf & "点击确定记录确认时间", 
                    vbOKOnly + vbInformation + vbSystemModal, 
                    "⏰ 定时提醒")
    ' 记录确认
    If result = vbOK Then
        Call WriteLog("已确认: " & message)
    End If
End Sub
Sub WriteLog(message)
    Dim logEntry
    logEntry = Now & " - " & message
    ' 追加到日志文件
    Dim outFile
    Set outFile = fso.OpenTextFile(logFile, 8, True)
    outFile.WriteLine logEntry
    outFile.Close
    ' 同时也输出到屏幕(可选)
    ' WScript.Echo logEntry
End Sub

使用说明

Python版本:

  1. 安装Python(如果还没有)
  2. 运行脚本
    python reminder.py

VBScript版本:

  1. 保存为 .vbs 文件
  2. 双击运行(会被杀毒软件询问,选择允许)

功能特点

定时提醒

  • 可设置任意间隔时间
  • 支持多个提醒任务
  • 系统托盘图标(Python版)

记录功能

  • 记录每次提醒时间
  • 记录用户确认时间
  • 保存到文本文件中

自定义提醒

您可以修改代码中的提醒内容和间隔:

# 
scheduler.add_reminder("站起来活动一下", 60)  # 每小时提醒
scheduler.add_reminder("喝水时间", 30)        # 每半小时提醒

日志文件示例

生成的日志文件 reminder_records.txt

[提醒] 2024-01-08 14:00:00 - 该喝水了!
[确认] 2024-01-08 14:00:15 - 该喝水了!
[提醒] 2024-01-08 14:30:00 - 该喝水了!
[确认] 2024-01-08 14:30:05 - 该喝水了!

高级配置(可选)

如果需要在系统后台运行:

  • Windows: 创建批处理文件自动启动
  • Mac/Linux: 设置cron任务或launchd

是否需要我提供后台运行的具体配置方法,或者根据您的特定需求调整脚本?

抱歉,评论功能暂时关闭!