护眼小工具 实现的源码 工作与休息定时器轮流运行

护眼小工具是一款专为长时间电脑使用者设计的软件,旨在通过定时休息来保护眼睛健康。
护眼小工具 实现的源码 工作与休息定时器轮流运行_第1张图片

原理:工作与休息定时器轮流运行。

<Window x:Class="EyeCareTool.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:EyeCareTool"
        mc:Ignorable="d"
        
        Title="护眼小工具" Height="350" Width="525">
    <Grid>
        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
            <Label>
                <TextBlock>
                <Run Text="工作时间(分钟):"/>
                <Run Text="{Binding ElementName=workTimeSlider, Path=Value, StringFormat={}{0,-8:F0}}"/>
                TextBlock>
            Label>
            <Slider x:Name="workTimeSlider" Minimum="1" Maximum="120" TickFrequency="1" IsSnapToTickEnabled="True"/>
            <Label>
                <TextBlock>
                     <Run Text="休息时间(分钟):"/>
                     <Run Text="{Binding ElementName=breakTimeSlider, Path=Value, StringFormat={}{0,-8:F0}}"/>
                TextBlock>
            Label>
            <Slider x:Name="breakTimeSlider" Minimum="1" Maximum="120" TickFrequency="1" IsSnapToTickEnabled="True"/>
            <Button x:Name="startButton" Content="开始" Click="StartButton_Click" Margin="10"/>
            <Button x:Name="stopButton" Content="停止" Click="StopButton_Click" Margin="10"/>
            <Label Content="{Binding Path=MyVariable}"/>
        StackPanel>
    Grid>
Window>
using Microsoft.Win32;
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Threading;

namespace EyeCareTool
{
    public partial class MainWindow : Window
    {
        private DispatcherTimer workTimer;
        private DispatcherTimer breakTimer;
        MyViewModel clock = new MyViewModel();

        public MainWindow()
        {
            InitializeComponent();


            workTimer = new DispatcherTimer();
            workTimer.Tick += WorkTimer_Tick;

            breakTimer = new DispatcherTimer();
            breakTimer.Tick += BreakTimer_Tick;

            StartButton_Click(null,null);

            // 使用一个定时器来实时更新时间
            DispatcherTimer timer = new DispatcherTimer();
            timer.Tick += UpdateClock_Tick;
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Start();

            //clock.MyVariable = "請等待";
            this.DataContext = clock;
            SetAutoStart(true);
        }
        int count = 0;
        private void UpdateClock_Tick(object sender, EventArgs e)
        {
           
            if (workTimer.IsEnabled)
            {
                count++;
                clock.MyVariable = "工作中 倒计时: " + (workTimer.Interval.TotalSeconds-count);
            }
            else if (breakTimer.IsEnabled)
            {
                count++;
                clock.MyVariable = "休息中  倒计时: " + (breakTimer.Interval.TotalSeconds - count);
            }
            else {
                clock.MyVariable = "未开始";
            }
        }
        private void StartButton_Click(object sender, RoutedEventArgs e)
        {
            workTimer.Interval = TimeSpan.FromMinutes(workTimeSlider.Value);
            workTimer.Start();
        }

        private void StopButton_Click(object sender, RoutedEventArgs e)
        {
            workTimer.Stop();
            breakTimer.Stop();
            // 也可以在这里解锁屏幕
        }

        private void WorkTimer_Tick(object sender, EventArgs e)
        {
            count = 0;
            workTimer.Stop();
            // 执行锁屏操作
            LockScreen();
            breakTimer.Interval = TimeSpan.FromMinutes(breakTimeSlider.Value);
            breakTimer.Start();
        }

        private void BreakTimer_Tick(object sender, EventArgs e)
        {
            count = 0;
            breakTimer.Stop();
            // 解锁屏幕
            UnlockScreen();
            // 可以选择是否重新启动工作计时器
            workTimer.Start();
        }

        private void LockScreen()
        {
            // 实现锁屏逻辑
        }

        private void UnlockScreen()
        {
            // 实现解锁屏幕逻辑
        }
        private const string RegistryKeyPath = @"Software\Microsoft\Windows\CurrentVersion\Run";
        private const string ApplicationName = "EyeCareTool"; // 你的应用程序名

        private void SetAutoStart(bool enabled)
        {
            using (RegistryKey key = Registry.CurrentUser.OpenSubKey(RegistryKeyPath, true))
            {
                if (enabled)
                {
                    key.SetValue(ApplicationName, System.Reflection.Assembly.GetExecutingAssembly().Location);
                }
                else
                {
                    key.DeleteValue(ApplicationName, false);
                }
            }
        }

    }
    public class MyViewModel : INotifyPropertyChanged
    {
        private string myVariable;

        public string MyVariable
        {
            get { return myVariable; }
            set
            {
                if (myVariable != value)
                {
                    myVariable = value;
                    OnPropertyChanged("MyVariable");
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

}

设计一个护眼小工具,其主要功能包括设置工作时间和休息时间,以及在休息时间自动锁屏并显示倒计时,可以用C#编程语言来实现。以下是一个基本的设计方案,分为几个关键部分:

1. 主要界面设计

  • 使用Windows Forms或WPF来设计用户界面。
  • 界面上需要有设置工作时间和休息时间的选项,比如两个NumericUpDown控件。
  • 开始和停止按钮来控制计时器。

2. 计时器功能

  • 使用System.Timers.Timer类来实现计时器。
  • 设置两个计时器,一个用于工作时间,一个用于休息时间。

3. 锁屏和倒计时显示

  • 在休息时间开始时,触发锁屏功能。
  • 在锁屏界面上显示倒计时。
  • 倒计时结束后自动解锁屏幕。

4. 示例代码框架

以下是一个简化的示例代码框架,演示了如何在C#中实现这些功能:

using System;
using System.Timers;
using System.Windows.Forms;

public partial class EyeCareForm : Form
{
    private Timer workTimer;
    private Timer breakTimer;
    private int workTime;    // in minutes
    private int breakTime;   // in minutes

    public EyeCareForm()
    {
        InitializeComponent();

        workTimer = new Timer();
        workTimer.Elapsed += OnWorkTimeElapsed;

        breakTimer = new Timer();
        breakTimer.Elapsed += OnBreakTimeElapsed;
    }

    private void startButton_Click(object sender, EventArgs e)
    {
        workTime = (int)workTimeNumericUpDown.Value;
        breakTime = (int)breakTimeNumericUpDown.Value;

        workTimer.Interval = workTime * 60000;
        workTimer.Start();
    }

    private void OnWorkTimeElapsed(object sender, ElapsedEventArgs e)
    {
        workTimer.Stop();

        // Lock screen and start break timer
        LockScreen();
        breakTimer.Interval = breakTime * 60000;
        breakTimer.Start();
    }

    private void OnBreakTimeElapsed(object sender, ElapsedEventArgs e)
    {
        breakTimer.Stop();

        // Unlock screen and restart work timer
        UnlockScreen();
        workTimer.Start();
    }

    private void LockScreen()
    {
        // Code to lock screen and display countdown
    }

    private void UnlockScreen()
    {
        // Code to unlock screen
    }
}

说明

  • workTimeNumericUpDownbreakTimeNumericUpDown 是用户用来设置工作和休息时间的控件。
  • startButton_Click 方法启动工作计时器。
  • OnWorkTimeElapsed 在工作时间结束时触发,启动休息计时器并锁屏。
  • OnBreakTimeElapsed 在休息时间结束时触发,解锁屏幕并重新启动工作计时器。
  • LockScreenUnlockScreen 需要根据实际情况实现锁屏和解锁的具体逻辑。

这只是一个基础的框架,具体的实现需要根据实际需求和环境进行调整和完善。例如,锁屏功能可能需要调用操作系统特定的API,而界面的美观和用户体验也需要进一步设计。

WPF

使用WPF (Windows Presentation Foundation) 来实现一个护眼小工具,你需要创建一个主界面,设置计时器,并实现锁屏与倒计时的功能。以下是一个基本的实现方法:

1. 创建WPF应用程序

首先,你需要在Visual Studio中创建一个新的WPF应用程序项目。

2. 主界面设计

在主界面(如MainWindow.xaml)中,你可以添加两个滑动条(Slider)或数字输入框(TextBox)用于设置工作时间和休息时间,以及两个按钮来控制计时器的启动和停止。

MainWindow.xaml 示例
<Window x:Class="EyeCareTool.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="护眼小工具" Height="350" Width="525">
    <Grid>
        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
            <Label Content="工作时间(分钟):"/>
            <Slider x:Name="workTimeSlider" Minimum="1" Maximum="120" TickFrequency="1" IsSnapToTickEnabled="True"/>
            <Label Content="休息时间(分钟):"/>
            <Slider x:Name="breakTimeSlider" Minimum="1" Maximum="30" TickFrequency="1" IsSnapToTickEnabled="True"/>
            <Button x:Name="startButton" Content="开始" Click="StartButton_Click"/>
            <Button x:Name="stopButton" Content="停止" Click="StopButton_Click"/>
        StackPanel>
    Grid>
Window>

3. 计时器逻辑

在代码后台(如MainWindow.xaml.cs),你需要创建计时器并处理开始和停止按钮的点击事件。

MainWindow.xaml.cs 示例
using System.Windows;
using System.Windows.Threading;

namespace EyeCareTool
{
    public partial class MainWindow : Window
    {
        private DispatcherTimer workTimer;
        private DispatcherTimer breakTimer;

        public MainWindow()
        {
            InitializeComponent();

            workTimer = new DispatcherTimer();
            workTimer.Tick += WorkTimer_Tick;

            breakTimer = new DispatcherTimer();
            breakTimer.Tick += BreakTimer_Tick;
        }

        private void StartButton_Click(object sender, RoutedEventArgs e)
        {
            workTimer.Interval = TimeSpan.FromMinutes(workTimeSlider.Value);
            workTimer.Start();
        }

        private void StopButton_Click(object sender, RoutedEventArgs e)
        {
            workTimer.Stop();
            breakTimer.Stop();
            // 也可以在这里解锁屏幕
        }

        private void WorkTimer_Tick(object sender, EventArgs e)
        {
            workTimer.Stop();
            // 执行锁屏操作
            LockScreen();
            breakTimer.Interval = TimeSpan.FromMinutes(breakTimeSlider.Value);
            breakTimer.Start();
        }

        private void BreakTimer_Tick(object sender, EventArgs e)
        {
            breakTimer.Stop();
            // 解锁屏幕
            UnlockScreen();
            // 可以选择是否重新启动工作计时器
        }

        private void LockScreen()
        {
            // 实现锁屏逻辑
        }

        private void UnlockScreen()
        {
            // 实现解锁屏幕逻辑
        }
    }
}

4. 实现锁屏和倒计时

锁屏和倒计时的实现取决于你的具体需求。你可以创建一个新的全屏窗口作为锁屏界面,并在该界面上显示倒计时。倒计时结束后,关闭这个窗口以解锁屏幕。

注意事项

  • 实现屏幕锁定功能可能需要特殊的权限或操作系统级别的调用。
  • 确保用户体验良好,特别是在锁屏和解锁过程中。
  • 你可能还需要考虑异常情况的处理,比如计算机进入休眠状态时计时器的行为。

这个示例提供了一个基本的框架,你可以根据具体需求进行扩展和优化。

以下是对该工具的详细介绍:

名称

护眼小工具

功能特点

  1. 定时提醒:用户可设定工作时间长度,例如每25分钟后,软件将自动提醒用户休息。
  2. 休息计时器:在每段工作时间后,软件将启动休息倒计时,用户可设定休息时间,例如5分钟。
  3. 自定义设置:用户可以根据个人习惯自定义工作和休息的时间长度,以及休息提醒的方式(如声音、弹窗等)。
  4. 眼部健康小贴士:在休息时间,软件提供眼部保健小贴士,如眼部运动指导。
  5. 使用统计:记录用户的日常使用情况,包括总工作时间和休息次数,帮助用户了解自己的使用习惯。
  6. 场景模式:提供不同场景下的使用模式,如“集中工作模式”、“阅读模式”等,以适应不同的使用需求。

使用方法

  • 安装:从官方网站或应用商店下载并安装。
  • 设定:打开软件后,进入设置界面,自定义工作/休息时间和提醒方式。
  • 开始使用:启动定时器,根据设置的时间工作和休息。

适用人群

  • 长时间面对电脑的办公人员。
  • 学生群体,尤其是进行长时间学习和阅读的学生。
  • 需要保护视力或有眼部健康需求的任何用户。

注意事项

  • 定时休息只是保护眼睛的一种方式,建议用户同时注意合理的饮食和适量的体育锻炼。
  • 使用护眼小工具时,应结合自身实际情况调整工作和休息的时间。

通过这种简单而有效的方法,护眼小工具旨在帮助用户减轻眼部疲劳,预防视力问题,同时提高工作效率。

你可能感兴趣的:(wpf)