办公族福利 —— 桌面提醒小工具~ 工作太投入,停下来喝杯水吧~

首先声明一下:我是来撒狗粮的~哈哈~

程序员的女票一直是个世纪难题。

然而,有一名程序媛作为女票更是难上加难~

问题来了:程序媛女票生病了,工作太忙不记得吃药怎么办?

于是,桌面级备忘提醒神器应时而生(休息时间随便写着玩的,没什么技术含量,纯属娱乐)


话不多说,代码如下:

  • 前台代码

    其中字体 DFWawaW5 为引入的第三方字体库。可以换为任意基础字体,如果也想引入第三方字体库,可自行查阅资料。

    <Window x:Class="TimerRemind.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="timerRemind" Height="280" Width="430"
            WindowStyle="None" 
            ResizeMode="NoResize" 
            Background="Transparent" 
            Topmost="True"
            WindowStartupLocation="CenterScreen" 
            Loaded="Grid_Loaded_1" 
            WindowState="Minimized"
            ShowInTaskbar="False"
            AllowsTransparency="True" 
            MouseDown="Window_MouseDown_1">
        <Grid Margin="0,0,0,0">
    
            <Label 
                Name="L_RemindText"
                Content="Hi~" 
                Background="Transparent" 
                Foreground="Transparent" 
                HorizontalAlignment="Center" 
                VerticalContentAlignment="Center"
                FontSize="58" 
                FontWeight="Bold" 
                FontFamily="{StaticResource ResourceKey=DFWaWaW5}" MouseDown="L_RemindText_MouseDown">
                
            </Label>
        </Grid>
    
    </Window>
    
    
  • 后台代码

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Threading;
    using System.Xml;
    
    namespace TimerRemind {
        /// <summary>
        /// MainWindow.xaml 的交互逻辑
        /// </summary>
        public partial class MainWindow : Window
        {
            //创建定时器对象
            DispatcherTimer dispatcherTimer = new DispatcherTimer();
    		//定义TimeSpan对象用来倒计时
            TimeSpan ts = new TimeSpan(0, 0, 0);
    
    		//默认提示保留的时间。时分秒。以 59 秒为例
            const int WAITING_HOURS = 0;
            const int WAITING_MINUTES = 0;
            const int WAITING_SECONDS = 59;
    
            public MainWindow()
            {
                InitializeComponent();
                //绑定计时器事件,时间间隔为 1 秒
                dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
                dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
                dispatcherTimer.IsEnabled = true;
            }
    
            /// <summary>
            /// 窗体加载时开启定时器,读取xml文档
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Grid_Loaded_1(object sender, RoutedEventArgs e)
            {
            	//窗体加载默认最小化
                WindowState = WindowState.Minimized;
                //开启计时器
                dispatcherTimer.Start();
            }
    
            /// <summary>
            /// 计时器事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void dispatcherTimer_Tick(object sender, EventArgs e)
            {
    			//读取xml文档
                var eList = ReadLineXML("reminder.xml");
                var current_time = DateTime.Now.ToString("HH:mm:ss");
    
                var rm = new Random();
    			//随机字体颜色
                int r1 = rm.Next(50, 256);
                int r2 = rm.Next(50, 256);
                int r3 = rm.Next(50, 256);
    
    			//随机位置,为了美观,四周空出 30 像素
                Top = rm.Next(30, Convert.ToInt32(SystemParameters.PrimaryScreenHeight - Height) - 30);
                Left = rm.Next(30, Convert.ToInt32(SystemParameters.PrimaryScreenWidth - Width) - 30);
    
                foreach (var item in eList) {
                	//读取 xml 文档结点属性
                    var time = item["time"];
                    var text = item["text"];
                    //如果为当前时间
                    if (current_time == time) {
                    	//重置倒计时
                        ts = new TimeSpan(WAITING_HOURS, WAITING_MINUTES, WAITING_SECONDS);
                        //改变提示信息
                        L_RemindText.Content = text;
                        //显示窗体
                        WindowState = WindowState.Normal;
                    }
                    //随机颜色
                    L_RemindText.Foreground = new SolidColorBrush(Color.FromArgb(122, Convert.ToByte(r1), Convert.ToByte(r2), Convert.ToByte(r3)));
                }
    			//计时器 - 1 秒
                ts = ts.Subtract(new TimeSpan(0, 0, 1));
                //计时结束
                if (ts.TotalSeconds < 0.0) {
                	//字体颜色变为透明 窗体最小化隐藏
                    L_RemindText.Foreground = new SolidColorBrush(Color.FromArgb(0, 255, 255, 255));
                    WindowState = WindowState.Minimized;
                }
            }
    
            /// <summary>
            /// 读取XML文档
            /// </summary>
            /// <param name="fileName"></param>
            private List<Dictionary<string, string>> ReadLineXML(string fileName)
            {
                List<Dictionary<string, string>> eList = new List<Dictionary<string,string>>();
    
                XmlDocument xml = new XmlDocument();
    
                if (string.IsNullOrEmpty(fileName) || !File.Exists(fileName)) { return eList; }
                xml.Load(fileName);
    
                XmlElement root = xml.DocumentElement;//获取根节点
                XmlNodeList xnl = xml.SelectNodes("/reminder/event");
    
                foreach (XmlNode item in xnl)
                {
                    Dictionary<string, string> dic = new Dictionary<string, string>();
                    dic.Add("time", item.Attributes["time"].Value);
                    dic.Add("text", item.Attributes["text"].Value);
                    eList.Add(dic);
                }
                return eList;
            }
    
    
            /// <summary>
            /// MouseDown to Close
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void L_RemindText_MouseDown(object sender, MouseButtonEventArgs e) {
                L_RemindText.Foreground = new SolidColorBrush(Color.FromArgb(0, 255, 255, 255));
                WindowState = WindowState.Minimized;
            }
    
            private void Window_MouseDown_1(object sender, MouseButtonEventArgs e) {
                L_RemindText.Foreground = new SolidColorBrush(Color.FromArgb(0, 255, 255, 255));
                WindowState = WindowState.Minimized;
            }
        }
    }
    
  • reminder.xml

    <reminder>
    	<event time="15:30:00" text="小丫头~记得吃药啦 ~">
    	</event>
    	<event time="16:00:00" text=" *-* 药吃完了吗?">
    	</event>
    </reminder>
    

由于本身就是闲余时间娱乐,所以信息的保存部分没有写,需要手动使用 xml 文档编辑需要提醒内容,使用时只需要将要提醒的时间和内容编辑入 xml 文档即可,xml 文档需要与 exe 文件同一目录

效果如下

鼠标点击提示信息可以关闭哦~~~

reminder

文尾附加 GitHub 源码地址


跳转到 GitHub

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HolaSecurity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值