只有想不到 没有做不到(防疲劳软件)
截图:
一、界面
在界面上没什么好说的,因为自用所以控件的摆放也比较随意。
二、逻辑
当点击开始按钮后,记录一个开始时间、启用一个Timer(Timer1)去不断的计算提醒剩余时间,当提醒剩余时间为0时,停用Timer1并调用WindowsApI去播放选中的歌,启用一个Timer(Timer2)用于计算歌曲是否已结束,当歌曲结束后再启用Timer1、把开始时间置为当前时间、停用Timer2,以上Timer时间间隔为1秒,其中在播放歌曲时会锁定计算机,这样是为了强迫使用者休息保护好自己的眼睛和保持清淅的思路。(如此不停的循环调用)
二、实现要点
1.时间差计算:
剩余时间=提醒间隔-(现在时间-开始时间)
TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks);
TimeSpan ts2 = new TimeSpan(startTime.Ticks);
TimeSpan ts = ts1.Subtract(ts2);
//这里要把天和小时数也算上,之前就是因为只算了分钟数,使剩余时间计算错误
int PastMinutes = ((ts.Days * 24) + (ts.Hours * 60) + ts.Minutes);
remainTime(剩余时间) = numericUpDown1.Value(提醒间隔) - PastMinutes;
2.窗体渐变效果:
我这里是使用窗体的Opacity属性来实现的,先把Opacity置为0然后不但的去累加。
if (this.Opacity <= 0.9)
{
this.Opacity += 0.05;
}
else {
timer4.Stop();
timer4.Dispose();
}
提示:因为在渐变的过程中Windows要对窗体不停进行绘制,挺耗资源。
3.窗体样式:
使用SkinEngine样式控件(如果需要可以传给大家)+.ssk样式文件去实现
实现方式:可以IO类提取样式文件夹中所有文件的名称,绑定到下拉列表中,通过下拉列表的相应事件
可以对窗体的样式进行实时改变。
skinEngine1.SkinFile = AppDomain.CurrentDomain.BaseDirectory + 样式文件夹名 + "\\" + 样式文
件名+".ssk";
4.窗体托盘化:
使用.Net自带的NotifyIcon托盘控件去完成使用很简单。
//指定托盘图片这里是使用资源文件指定的,你也可以指定图片路径
this.notifyIcon1.Icon = global::PreventFatigue.Properties.Resources.MA_SMILE_9;
//指定托盘的名称
this.notifyIcon1.Text = this.Text;
//托盘单击事件中的代码
this.Visible = true;
this.WindowState = FormWindowState.Normal;
this.notifyIcon1.Visible = false;
//窗体大小调整事件(Resize事件)中的代码
if (this.WindowState == FormWindowState.Minimized)
{
this.Visible = false;
this.notifyIcon1.Visible = true;
}
5.歌曲播放windowAPI代码:
大家可以使用这个类做其它类似的软件
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.IO;
namespace clsMCIPlay
{
/// <summary>
/// clsMci 的摘要说明。
/// </summary>
public class clsMCI
{
public clsMCI()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//定义API函数使用的字符串变量
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
private string Name = "";
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
private string durLength = "";
[MarshalAs(UnmanagedType.LPTStr, SizeConst = 128)]
private string TemStr = "";
int ilong;
//定义播放状态枚举变量
public enum State
{
mPlaying = 1,
mPuase = 2,
mStop = 3
};
//结构变量
public struct structMCI
{
public bool bMut;
public int iDur;
public int iPos;
public int iVol;
public int iBal;
public string iName;
public State state;
};
public structMCI mc = new structMCI();
/// <summary>
/// 取得和设置播放文件属性
/// </summary>
public string FileName
{
get
{
return mc.iName;
}
set
{
//ASCIIEncoding asc = new ASCIIEncoding();
try
{
TemStr = "";
TemStr = TemStr.PadLeft(127, Convert.ToChar(" "));
Name = Name.PadLeft(260, Convert.ToChar(" "));
mc.iName = value;
ilong = APIClass.GetShortPathName(mc.iName, Name, Name.Length);
Name = GetCurrPath(Name);
//Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias
media";
Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias
media";
ilong = APIClass.mciSendString("close all", TemStr, TemStr.Length, 0);
ilong = APIClass.mciSendString(Name, TemStr, TemStr.Length, 0);
ilong = APIClass.mciSendString("set media time format milliseconds", TemStr,
TemStr.Length, 0);
mc.state = State.mStop;
}
catch
{
throw new Exception("设置播放文件属性出错!");
}
}
}
/// <summary>
/// 播放
/// </summary>
public void play()
{
TemStr = "";
TemStr = TemStr.PadLeft(127, Convert.ToChar(" "));
APIClass.mciSendString("play media", TemStr, TemStr.Length, 0);
mc.state = State.mPlaying;
}
/// <summary>
/// 停止
/// </summary>
public void StopT()
{
TemStr = "";
TemStr = TemStr.PadLeft(128, Convert.ToChar(" "));
ilong = APIClass.mciSendString("close media", TemStr, 128, 0);
ilong = APIClass.mciSendString("close all", TemStr, 128, 0);
mc.state = State.mStop;
}
/// <summary>
/// 暂停
/// </summary>
public void Puase()
{
TemStr = "";
TemStr = TemStr.PadLeft(128, Convert.ToChar(" "));
ilong = APIClass.mciSendString("pause media", TemStr, TemStr.Length, 0);
mc.state = State.mPuase;
}
/// <summary>
/// 获得当前路径
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
private string GetCurrPath(string name)
{
if (name.Length < 1) return "";
name = name.Trim();
name = name.Substring(0, name.Length - 1);
return name;
}
/// <summary>
/// 总时间(秒钟)
/// </summary>
public int Duration
{
get
{
durLength = "";
durLength = durLength.PadLeft(128, Convert.ToChar(" "));
APIClass.mciSendString("status media length", durLength, durLength.Length, 0);
durLength = durLength.Trim();
if (durLength == "") return 0;
return (int)(Convert.ToDouble(durLength) / 1000f);
}
}
/// <summary>
/// 当前时间(秒钟)
/// </summary>
public int CurrentPosition
{
get
{
durLength = "";
durLength = durLength.PadLeft(128, Convert.ToChar(" "));
APIClass.mciSendString("status media position", durLength, durLength.Length, 0);
durLength = durLength.Trim();
mc.iPos = (int)(Convert.ToDouble(durLength) / 1000f);
return mc.iPos;
}
}
}
/// <summary>
/// WindowsAPI类
/// </summary>
public class APIClass
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetShortPathName(
string lpszLongPath,
string shortFile,
int cchBuffer
);
[DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
public static extern int mciSendString(
string lpstrCommand,
string lpstrReturnString,
int uReturnLength,
int hwndCallback
);
}
}
转载于:https://www.cnblogs.com/Real_Dream/articles/1577917.html
只有想不到 没有做不到(防疲劳软件)相关推荐
- dlp防泄密系统卸载_浙江好用的企业图纸防泄密软件推荐,局域网内部图纸透明加密方案...
企业图纸防泄密 浙江加密软件 图纸透明加密方案 浙江优秀企业众多,企业图纸防泄密已经成为企业网络安全管理的重要方面,很多浙江的企事业单位为了保护单位图纸信息安全和局域网内部图纸信息安全而纷纷采用各种数 ...
- usb管控软件_数据防泄密软件介绍
北京海宇安全防泄密软件是一套信息安全管理软件,主要适用于企业内部的安全防护,保护企业内部文件不泄露,规范员工操作计算机的行为,为企业提供一体化信息安全解决方案.整套系统会帮助企业从源头解决防泄密等问题 ...
- 疲劳驾驶样本集_欧洲要求,2022年开始新车必须配备DMS(防疲劳预警)系统
司机在驾驶过程中使用手机.吸烟.疲劳驾驶等不良驾驶行为严重影响交通安全,所以对驾驶员危险行为检测的DMS系统就尤为重要.本文将为大家介绍基于VCSEL红外光源的DMS解决方案. 一.DMS市场概况 D ...
- u盘解密软件_企业都使用哪些数据防泄密软件
数据防泄漏 数据防泄密,相信对于现在信息化办公的企业来说并不陌生.数字信息化的普遍应用使得企业信息泄露事件频发,根据调查显示,当今数据泄露事件中,90%的数据泄露是由于内部人员有意.无意的数据外泄行为 ...
- mp3排序软件哪个好用_U盘加密软件_U盘防拷贝软件哪个好用?
互联网信息时代,加密软件在市场上非常多,选择软件的时候不知道如何选择.在U盘领域,也有加密软件,那么,u盘加密软件哪个好?只要简单好用.安全靠谱就行,这是很多小伙伴的心声.有一款比较出名的U盘加密软件 ...
- 数据防泄密软件都是怎么对文件加密的?
1.数据防泄密软件包括对透明文件加密: 安装了加密软件后.用户感觉不到加密软件的存在.可防止员工拿走图纸.文件.拿走也无法打开. 2.数据防泄密软件可以对文件加密外发管理 可以控制图纸的使用时间期限. ...
- 数据防泄密软件可以解决哪些安全问题?
企业数据安全保护很重要,很多企业为了保护数据尝试各种办法会防止数据外传,不过想要数据完全封锁是不可能的,但如果不加以控制,则有可能造成数据泄露的风险.针对这些问题,企业可以通过在内部部署数据防泄密软件 ...
- 唐诗三百首加密软件如何使用_文档文件加密及设计图纸加密的防泄密软件怎么部署和使用...
深圳加密软件发展很快,目前较先进.较安全的加密技术是透明加密.透明加密是一种根据要求在操作系统层自动地对写入存储介质的数据进行加密的技术.文件透明加密模块是防止电子文件由于公司内部员工泄露而开发的内核 ...
- 防抄袭软件防抄袭系统反抄袭系统-推荐
今日特别推荐一个中文的防抄袭软件反抄袭系统copycheck -拷克,本防抄袭软件效果不错几乎实时检测.
最新文章
- 贝叶斯厉害在哪里,相当牛的文章
- 神策专访丨摩天轮票务陈校校:在线票务平台精准营销之道
- LeetCode35.搜索插入位置 JavaScript
- python关键字列表的表达式,python 列表推导和生成器表达式的使用
- 小技巧:Chrome开发者工具里的Alt+单击
- 调用布尔变量java_关于java的参数的调用,还有布尔的理解,这有一段代码,我有些不太理解,希望能够帮我分析下,谢谢...
- 前端学习(2009)vue之电商管理系统电商系统之渲染商品属性的结构
- 最全使用SQL Server创建、配置数据库的各种方法和注意细节
- __clone class php_「PHP 技巧」 不要直接克隆对象,请使用深拷贝
- Behavior Language Processing with Graph based Feature Generation for Fraud Detectionin OnlineLending
- sql server php删除,使用 SQL Server 添加删除修改查询储存过程
- 数据科学即将迎来“无代码”时代
- Ubuntu快速设置指南
- WIN10下搭建vue开发环境
- iastora怎么改成ahci_WIN7系统IDE改成AHCI就蓝屏怎么办_win7硬盘模式ide改成ahci蓝屏处理方法-win7之家...
- git-linux终端命令详解
- HDU_多重背包系列
- 怎样用 16.7 个小时做 40 小时的工作
- 未来的量子存储器!科学家发现全新量子光学效应 | Nature速递
- autodock windows安装对接使用、vina安装;openbabel安装使用
热门文章
- CentOS7配置samba共享文件系统
- css3过渡缓慢排过去,css3过渡
- Windows update一直停留在正在检查更新,为什么
- 阿里分布式数据库服务实践
- Java 学习总结(189)—— Java 8 功能接口使用总结
- ZooKeeper学习总结(4)——Zookeeper选举机制总结
- Windows学习总结(20)——Win10 子系统Linux(Ubuntu 18.04)的安装与卸载
- Java基础学习总结(146)——开发人员日志实践规范
- python输入输出有问题_Python中的输入与输出
- arduino水温度传感器数字显示_液晶显示屏应用示例以及程序详解