学校里要做课上操,上去播放好麻烦的哦……于是——
AutoPlay System诞生了!
AutoPlay System(自动播放系统)为W-RB独立制作,基于.NET Framework 4.7.2,用C# Winform写的一个小软件,以便于不用每次去找视频播放了。是不是很心动呢?那我们开始吧
主要思想
新建线程,每隔几秒获取新一次时间并判断是否到达时间,若到达则打开.mp4文件。写入注册表实现开机自启动,隐藏进入托盘实现后台运行。
代码环境
C# Winform
Visual Studio 2019
Windows 10系统。
正式制作!
首先,我们先创建一个C# Winform项目。这里过程就先略去了。
#写入注册表
然后进入代码界面。我们先来写入注册表,代码如下:
path = Application.ExecutablePath;
RegistryKey rk = Registry.LocalMachine;
RegistryKey rk2 = rk.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");//注册表路径
rk2.SetValue("AutoPlay_System", path);//此处的"AutoPlay_System"可以自行起名
rk2.Close();
rk.Close();
此段代码应写在public Form1()内,InitializeComponent();之前。
别忘了还要定义一个string,用于存放路径:
public string path;
至此,注册表写入已经完成,接着我们来做时间的获取:
#时间获取
首先我们定义一个字符串TTimes,它是应播放的时间点,用于判断。
public string TTimes = "9:45";
这里的时间可以随意填,格式为小时:分钟
注意:这里的冒号必须用英文格式。
然后再定义一个字符串Times,用于获取时间。
public string Times = DateTime.Now.ToShortTimeString().ToString();
DateTime.Now.ToShortTimeString().ToString();的作用是获取当前时间,返回格式是小时:分钟。
然后加入判断与打开文件:
#判断&打开文件
if (Times == TTimes)
{
System.Diagnostics.Process.Start("D:\\体育三操\\课上操.mp4");//打开文件
}
一切看起来都那么的美好。本文章到此结束了。
才怪啊啊啊啊
刚保存完文件,我才想起来,我还没加循环怎么一直判断啊啊啊啊
然后我们加上while循环:
#While循环
while (true)
{
if (Times == TTimes)
{
System.Diagnostics.Process.Start("D:\\体育三操\\课上操.mp4");
}
}
不错,但是我们还意识到了一个问题:
While循环加在哪里啊啊啊啊
这个问题似乎很好解决,我们可以新开一个线程(RIGHT)
#多线程
Thread che = new Thread(new ThreadStart(Check));
che.Start();
那……这个Check怎么报错啊?
其实这个Check是个函数,线程的运行函数。我们写一个函数:
private void Check()
{
while (true)
{
if (Times == TTimes)
{
System.Diagnostics.Process.Start("D:\\体育三操\\课上操.mp4");
Thread.Sleep(100000);//停止线程1分钟防止屡次打开
}
Thread.Sleep(5000);//停止线程5000ms,防止CPU炸掉
}
很完美,这篇文章结束了。
才怪啊啊啊啊
怎么开了多线程还是判断不好啊啊啊啊
这时,我灵机一动!我一直没用更新现在时间欸
于是:
private void Check()
{
while (true)
{
Times = DateTime.Now.ToShortTimeString().ToString();
if (Times == TTimes)
{
System.Diagnostics.Process.Start("D:\\体育三操\\课上操.mp4");
Thread.Sleep(100000);//停止线程1分钟防止屡次打开
}
Thread.Sleep(5000);//停止线程5000ms,防止CPU炸掉
}
至此,判断已经做好,接下来我们做后台~
#后台运行
我是自己做了个button。首先先拖一个button
private void button2_Click(object sender, EventArgs e)
{
closs();
}
然后写个closs函数
private void closs()
{
this.Visible = false;
this.ShowInTaskbar = false;
notifyIcon1.Visible = true;
}
那么……notifyIcon1是个啥?
我们拖一个notifyIcon控件,再拖一个contextNemuStrip。
notifyIcon1在属性栏Icon里随便弄一个,然后把ContextNemuStrip挂到刚刚拖出来的contextNemuStrip1.
然后点击contextNemuStrip1,可以看到上面有一点白边。我们加入"显示"和"退出"
然后分别双击"显示"和"退出",写下代码。
private void 显示ToolStripMenuItem_Click_1(object sender, EventArgs e)
{
this.Visible = true;
}
注意:这个好像通过退出无法退出,我们可以加一个提示让他从任务管理器退出
private void 退出ToolStripMenuItem_Click_1(object sender, EventArgs e)
{
if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
MessageBox.Show("本按钮无法退出程序\n请从任务管理器中关闭", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
这样就差不多了,可以自己在搞一搞。
最后放上我的全部代码:
#全部代码
using System;
using Microsoft.Win32;
using System.Windows.Forms;
using System.Threading;
namespace AutoPlay_System
{
public partial class Form1 : Form
{
public string Times = DateTime.Now.ToShortTimeString().ToString();
public string TTimes = "9:45";
public string path;
public Form1()
{
path = Application.ExecutablePath;
RegistryKey rk = Registry.LocalMachine;
RegistryKey rk2 = rk.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
rk2.SetValue("AutoPlay_System", path);
rk2.Close();
rk.Close();
Thread che = new Thread(new ThreadStart(Check));
che.Start();
InitializeComponent();
}
private void Check()
{
while (true)
{
Times = DateTime.Now.ToShortTimeString().ToString();
if (Times == TTimes)
{
System.Diagnostics.Process.Start("D:\\体育三操\\课上操.mp4");
Thread.Sleep(100000);
}
Thread.Sleep(5000);
}
}
private void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("AutoPlay System已启动!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void button2_Click(object sender, EventArgs e)
{
closs();
}
private void closs()
{
this.Visible = false;
this.ShowInTaskbar = false;
notifyIcon1.Visible = true;
}
private void 显示ToolStripMenuItem_Click_1(object sender, EventArgs e)
{
this.Visible = true;
}
private void 退出ToolStripMenuItem_Click_1(object sender, EventArgs e)
{
if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
MessageBox.Show("本按钮无法退出程序\n请从任务管理器中关闭", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}