你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图

这篇具有很好参考价值的文章主要介绍了你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录
  • 说明
    • 设置提醒时间,及休息时间
    • 久坐提醒倒计时
    • 休息提醒倒计时
    • 休息到计时
  • 代码说明
    • 主窗体设置
    • 工作到计时
    • 休息倒计时
  • 源码
  • 高清图

久坐提醒桌面小程序: 干这行职业病比较多,之前用爱丽(即:玻璃酸钠滴眼液),用的时候挺舒服,缓解吧,不过治标不治本。
注意休息,加强锻炼非常有必要,每工作1小时,休息10分钟(程序中有锁键盘鼠标的功能,那个太狠了,万一领导要东西电脑锁住了尴尬了,被我注释了),看看远方,办公桌上放盘绿值,没事的时候看看,站个桩,或者高架马步,马步扎得好,到老疾病少,不过注意别把膝盖搞坏了,我玩得狠现在有积液了 😂

八段锦真的不错,可以练练,B站上选那种带呼吸版的

网上下的一些小程序,达不到自己想要的效果,要么就是功能复杂,于是选择了自己开发。
图片来源于给小孩买的挂贴,贴墙上看的。于是自己网上找了图片当成锁屏图片使用了。稍微看看,总比一起盯着代码要好,不建议长时间看,那样的话眼睛还是没离开显示器,久坐提醒主要是提醒起来走走动动

采用WPF 基于HandyControl 开发的小程序。

  1. 有2年不写WPF开发了,练练手
  2. 平时工作一坐就是半天,眼睛不怎么好了,干眼严重

说明

设置提醒时间,及休息时间

默认50分钟休息10分钟,按整点算(强迫症),如果工作不足10分钟,则将时间加到下一轮中。
取消整点勾选,从开始时计划
你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图

久坐提醒倒计时

开始后右下角有小球球,显示倒计时,像360那样的窗口悬停吸附不知道怎么做,没继续研究
你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图

休息提醒倒计时

距休息10秒时,窗体会显示到最上层,同时字体颜色变为黄色
你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图

休息到计时

从网上找的护眼图片,可以照着练练,再起来走一走。按ESC退出 或者时间到了继续下一轮倒计时
不建议看的时间太长,因为那样的话,你的眼睛还是没有离开电脑
你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图

代码说明

设置界面、倒计时、休息界面,三个页面,通过 VmReminder 进行数据共享
依赖库

  • .Net Framework 4.5
  • HandyControl 3.2

主窗体设置

这是基本框架,参考Office设计,右上解可扩展【设置】、【帮助】功能,可用于其它项目
设置工作时长、休息时长,默认从整点开始计时(有强迫症)

MainWindow.xaml

private void BtnStart_OnClick(object sender, RoutedEventArgs e)
{
    _vm.IsHourly = chkHourly.IsChecked.HasValue && chkHourly.IsChecked.Value;
    _vm.WorkValue = (int)numWork.Value;
    _vm.BreakValue = (int)numBreak.Value;
    //开始后,调用倒计时窗体,并将倒计时窗体设为主窗体,否则点拖盘图标,会弹出设置窗体
    CountDown countDown = new CountDown();
    countDown.DataContext = this._vm;
    countDown.InitData();
    Application.Current.MainWindow = countDown;
    countDown.Show();
    this.Close();
}

工作到计时

窗口倒计时时,显示在窗口右下角,
CountDown.xml
托盘图标--放在这个窗体下的原因,是因为 休息转工作时,避免托盘下会出现多个图标

<hc:NotifyIcon x:Name="NotifyIcon" Click="NotifyIconContextContent_OnClick"
               Text="久坐提醒"
               Visibility="Visible"
               Icon="/Application.ico">
    <hc:NotifyIcon.ContextMenu>
        <ContextMenu>
            <MenuItem Click="Settings_OnClick" Header="设置"/>
            <MenuItem Click="Exit_OnClick" Header="退出"/>
        </ContextMenu>
    </hc:NotifyIcon.ContextMenu>
    <hc:Interaction.Triggers>
        <hc:EventTrigger EventName="Click">
            <!--<hc:EventToCommand Command="hc:ControlCommands.PushMainWindow2Top"/>-->
        </hc:EventTrigger>
    </hc:Interaction.Triggers>
</hc:NotifyIcon>

WPF StringFormat="{}{0:0#}:{1:0#}" 显示倒计时,格式化,如果个位数时,前面补0

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" >
    <TextBlock HorizontalAlignment="Center" Margin="5" Style="{StaticResource TextBlockLargeBold}" Foreground="White">
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0:0#}:{1:0#}">
                <Binding Path="CountDownWorkMinute" />
                <Binding Path="CountDownWorkSecond" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
</StackPanel>
/// <summary>
/// 窗口显示在右下角
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CountDown_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
    var desktopWorkingArea = System.Windows.SystemParameters.WorkArea;
    this.Left = desktopWorkingArea.Right - this.Width;
    this.Top = desktopWorkingArea.Bottom - this.Height;
}

通过定时器,工作实现倒计时功能

private void Timer_OnTick(object sender, EventArgs e)
{
    Remind();

    //倒计时时结束,弹出休息窗口
    if (_vm.CountDownWorkMinute == 0 && _vm.CountDownWorkSecond == 0)
    {
        _timer.Stop();
        NotifyIcon.Visibility = Visibility.Hidden;
        WorkBreak workBreak = new WorkBreak();
        Application.Current.MainWindow = workBreak;
        workBreak.DataContext = this._vm;
        workBreak.InitData();
        workBreak.ShowDialog();
        this.Close();
        return;
    }
    //如果分钟大于0,秒=0,那分-1,秒>0 秒-1
    if (_vm.CountDownWorkMinute > 0)
    {
        if (_vm.CountDownWorkSecond > 0)
        {
            _vm.CountDownWorkSecond--;
        }
        else
        {
            _vm.CountDownWorkMinute--;
            _vm.CountDownWorkSecond = 60;
        }
    }

    if (_vm.CountDownWorkMinute == 0)
    {
        _vm.CountDownWorkSecond--;
    }
}

休息倒计时

休息窗体显示两护眼张图片和一个休息到计时,按ESC时可取消本次休息,
WorkBreak.xaml

<base:BaseWindow x:Class="VipReminder.Views.WorkBreak"
                 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:base="clr-namespace:Base.Base"
                 mc:Ignorable="d" KeyDown="WorkBreak_OnKeyDown"
                 Title="WorkBreak" Height="450" Width="800">
    <DockPanel Background="#00a54f">
        <DockPanel Dock="Bottom" >
            <TextBlock HorizontalAlignment="Center" Margin="5" Style="{StaticResource TextBlockLargeBold}" Foreground="White">
                <TextBlock.Text>
                    <MultiBinding StringFormat="{}{0:0#}:{1:0#}">
                        <Binding Path="CountDownBreakMinute" />
                        <Binding Path="CountDownBreakSecond" />
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DockPanel>
        <DockPanel Dock="Left">
            <Image Source="/Styles/Images/001.jpg"/>
        </DockPanel>
        <DockPanel Dock="Right">
             <Image Source="/Styles/Images/002.jpg"/>
        </DockPanel>
    </DockPanel>
</base:BaseWindow>

WorkBreak.xaml.cs

namespace VipReminder.Views
{
    /// <summary>
    /// WorkBreak.xaml 的交互逻辑
    /// </summary>
    public partial class WorkBreak
    {

        // 定时器
        private DispatcherTimer _timer;

        public VmReminder _vm;



        public WorkBreak()
        {
            InitializeComponent();
            WindowState = WindowState.Maximized; //全屏显示
            ShowInTaskbar = false;   //任务栏不显示图标 
            Topmost = true; //窗体最前端显示
            //this.countDown = countDown; == TODO CountDown 单例
        }

        private void WorkBreak_OnKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Escape)//Esc键  
            {
                OpenCountDown();
            }
        }

        private void OpenCountDown()
        {
            CountDown countDown = new CountDown();
            Application.Current.MainWindow = countDown;
            countDown.DataContext = this._vm;
            countDown.InitData();
            countDown.Show();
            _timer.Stop();
            this.Close();
        }


        public void InitData()
        {
            _vm = DataContext as VmReminder;

            this.ShowInTaskbar = false;  //任务栏不显示图标

            _vm.CountDownBreakMinute = _vm.BreakValue;
            _vm.CountDownBreakSecond = 0;

            _timer = new DispatcherTimer();
            _timer.Tick += Timer_OnTick;
            _timer.Interval = TimeSpan.FromSeconds(1);
            _timer.Start();

            //KeyboardBlocker.off();//锁键盘
        }


        private void Timer_OnTick(object sender, EventArgs e)
        {
            //倒计时时结束,弹出休息窗口
            if (_vm.CountDownBreakMinute == 0 && _vm.CountDownBreakSecond == 0)
            {
                _timer.Stop();
                OpenCountDown();
                return;
            }
            //如果分钟大于0,秒=0,那分-1,秒>0 减秒
            if (_vm.CountDownBreakMinute > 0)
            {
                if (_vm.CountDownBreakSecond > 0)
                {
                    _vm.CountDownBreakSecond--;
                }
                else
                {
                    _vm.CountDownBreakMinute--;
                    _vm.CountDownBreakSecond = 60;
                }
            }

            if (_vm.CountDownBreakMinute == 0)
            {
                _vm.CountDownBreakSecond--;
            }
        }

    }
}

源码

程序下载:https://gitee.com/VipSoft/Reminder/releases/download/V1.0/VipReminder.zip
源码地址:https://gitee.com/VipSoft/Reminder

高清图

眼肌运动高清图下载文章来源地址https://www.toymoban.com/news/detail-633071.html

你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图
点击查看高清图

到了这里,关于你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF 实现 Message 消息提醒控件

    WPF 实现 Message 消息提醒控件 控 件:Message 作 者:WPFDevelopersOrg - 驚鏵 原文链接:https://github.com/WPFDevelopersOrg/WPFDevelopers 框架使用 .NET4 至 .NET6 ; Visual Studio 2022 ; 接着上一篇 1)新增 MessageListBoxItem.cs 代码如下: 新增了名为 MessageType 的依赖属性,类型为 MessageBoxImage ,默认值为

    2024年02月16日
    浏览(35)
  • 怎么在桌面查看备忘录新的提醒事项?方法教程

    在这个信息爆炸的时代,我们每天都面临着无数的任务和提醒。作为一名忙碌的职场人,我经常需要依赖备忘录来记录重要的待办事项,以免遗漏。备忘录,就像我生活中的小助手,帮我记下工作会议、生日提醒、购物清单等等,无时无刻不在为我分担记忆的压力。 然而,仅

    2024年01月17日
    浏览(33)
  • 测试开源C#人脸识别模块ViewFaceCore(5:质量检测和眼睛状态检测)

       ViewFaceCore模块中的FaceQuality支持预测人脸质量 ,最初以为是预测人体体重,实际测试过程中才发现是评估人脸图片质量,主要调用Detect函数执行图片质量检测操作,其函数原型如下所示:   调用FaceQuality进行人脸质量检测主要包括以下步骤:   1)调用faceDetector类获

    2024年02月15日
    浏览(34)
  • [C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测

    【官方框架地址】 https://github.com/ViewFaceCore/ViewFaceCore 【算法介绍】 SeetaFace6是由中国科技公司自主研发的一款人脸识别技术,它基于深度学习算法,能够快速、准确地识别出人脸,并且支持多种应用场景,如门禁系统、移动支付、安全监控等。SeetaFace6的识别准确率高达99%以上

    2024年01月21日
    浏览(54)
  • wpf调用远程桌面

    最近需要开发一个WPF 调用远程桌面的功能,网上找了一些资料+自己测试。发现有一些坑,这里记录一下。避免以后遇到同类问题。 1.控件选择 主要利用的是微软的自带的远程桌面连接控件,我尝试的是 AxMsRdpClient8 和AxMsRdpClient8NotSafeForScripting这两个控件。 经过尝试,AxMsRdp

    2024年02月04日
    浏览(27)
  • [C#]OpenCvSharp结合yolov8-face实现L2CS-Net眼睛注视方向估计或者人脸朝向估计

    github地址:https://github.com/Ahmednull/L2CS-Net L2CS-Net介绍: 眼睛注视(eye gaze) 是在各种应用中使用的基本线索之一。 它表示用户在人机交互和开放对话系统中的参与程度。此外,它还被用于增强现实,用于预测用户的注意力,从而提高设备的感知能力,降低功耗。 因此,研究人

    2024年01月16日
    浏览(40)
  • WPF如何构建MVVM+模块化的桌面应用

    模块化是一种分治思想,不仅可以分离复杂的业务逻辑,还可以进行不同任务的分工。模块与模块之间相互独立,从而构建一种松耦合的应用程序,便于开发和维护。 .NET 6 + WPF + Prism (v8.0.0.1909) + HandyControl (v3.4.0) 什么是MVVM Model-View-ViewModel  是一种软件架构设计,它是一种简化

    2024年02月13日
    浏览(45)
  • 桌面软件开发框架 Electron、Qt、WPF 和 WinForms 怎么选?

    Electron 是一个基于 Web 技术的跨平台桌面应用程序开发框架。它使用 HTML、CSS 和 JavaScript 来构建应用程序界面,并借助 Chromium 渲染引擎提供强大的页面渲染能力。Electron 的主要特点包括: 跨平台:Electron 可以在 Windows、macOS 和 Linux 等多个主流操作系统上运行,为开发者提供了

    2024年02月12日
    浏览(48)
  • 工控视觉项目桌面端WPF源码,UI源码,已实现前后端MVVM数据绑定

    工控视觉项目桌面端WPF源码,UI源码,已实现前后端MVVM数据绑定。 除了两个柱状图用的第三方开源控件,其他都是原生自己写的,非常适合初学者熟悉语法、事件、触发器、MVVM 机制、布局容器,方便二次开发和修改 工控视觉项目桌面端WPF源码,UI源码,已实现前后端MVVM数据

    2024年02月20日
    浏览(45)
  • C# WPF布局

    布局: 1、Grid: Window x:Class=\\\"WpfApp2.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-compatibili

    2024年04月22日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包