定时倒计时关机的小程序

  昨天晚上想要让电脑在百度云上下载很多东西,但是找不到百度云上有下载完后自动关机的选择项,感觉很懊恼。只能自己用cmd输入命令去执行自动关机了,感觉好麻烦。而且这种命令行的执行看起来太不爽了。于是今天在上起床就写了一个定时关机和倒计时关机的小程序。原理还是使用了cmd命令行。

关机:shutdown -s -t 10表示10s后自动关机

取消:shutdown -a表示取消自动关机

界面如下:

代码如下:

  1   public partial class Form1 : Form
  2     {
  3         public Form1()
  4         {
  5             InitializeComponent();
  6         }
  7         private bool sureDown = false;
  8         private int countDownTime = 0;
  9         private void timer1_Tick(object sender, EventArgs e)
 10         {
 11             lblDateTime.Text = DateTime.Now.ToString();
 12             //if (sureDown)
 13             //{
 14             //    cboHour.SelectedIndex = Convert.ToInt32(DateTime.Now.Hour);
 15             //    cboMinute.SelectedIndex = Convert.ToInt32(DateTime.Now.Minute); 
 16             //}
 17         }
 18         //选择定时关机
 19         private void btnSureTime_Click(object sender, EventArgs e)
 20         {
 21             sureDown = true;
 22             cboHour.SelectedIndex = Convert.ToInt32(DateTime.Now.Hour);
 23             cboMinute.SelectedIndex = Convert.ToInt32(DateTime.Now.Minute);
 24         }
 25         //选择倒计时关机
 26         private void btnCountDown_Click(object sender, EventArgs e)
 27         {
 28             sureDown = false;
 29             cboHour.SelectedIndex =0;
 30             cboMinute.SelectedIndex =30;
 31         }
 32         /// <summary>
 33         /// 执行自动关机,包括定时关机和倒计时关机
 34         /// </summary>
 35         /// <param name="sender"></param>
 36         /// <param name="e"></param>
 37         private void btnDown_Click(object sender, EventArgs e)
 38         {
 39             if (cboHour.Text == "" || cboMinute.Text == "")
 40             {
 41                 MessageBox.Show("请先选择模式");
 42                 return;
 43             }
 44             if (sureDown)
 45             {
 46                 //定时关机计算时间
 47                 countDownTime = Convert.ToInt32(cboHour.SelectedItem) * 3600 + Convert.ToInt32(cboMinute.SelectedItem) * 60 -Convert.ToInt32(DateTime.Now.Hour)*3600-Convert.ToInt32(DateTime.Now.Minute)*60 -  Convert.ToInt32(DateTime.Now.Second);
 48                 if (countDownTime <= 0)
 49                 {
 50                     countDownTime =24*60*60 +countDownTime;
 51                 }
 52             }
 53             else
 54             {
 55                 //倒计时关机计算时间
 56                 countDownTime = Convert.ToInt32(cboHour.SelectedItem) * 3600 + Convert.ToInt32(cboMinute.SelectedItem) * 60;
 57             }
 58             int[] time = new int[1];
 59             time[0] = countDownTime;
 60             MakeProcess("shutdown -s -t ", time);
 61             Form2 frm = new Form2(countDownTime);
 62             frm.ShowDialog();
 63             //Process cmdP = new Process();
 64             //cmdP.StartInfo.FileName = "cmd.exe";//进程打开文件
 65             //cmdP.StartInfo.UseShellExecute = false;//是否启动系统外壳
 66             //cmdP.StartInfo.RedirectStandardInput = true;//是否从StandardInout输入
 67             //cmdP.StartInfo.RedirectStandardOutput = true;
 68             //cmdP.StartInfo.RedirectStandardError = true;
 69             //cmdP.StartInfo.CreateNoWindow = true;//启动程序时是否显示窗口
 70             //cmdP.Start();
 71             //cmdP.StandardInput.WriteLine("shutdown -s -t "+countDownTime);
 72             //cmdP.StandardInput.WriteLine("exit");
 73             //cmdP.WaitForExit();
 74             //cmdP.Close();
 75         }
 76         /// <summary>
 77         /// 取消自动关机
 78         /// </summary>
 79         /// <param name="sender"></param>
 80         /// <param name="e"></param>
 81         private void btnRemove_Click(object sender, EventArgs e)
 82         {
 83             MakeProcess("shutdown -a");
 84             //Process cmdP = new Process();
 85             //cmdP.StartInfo.FileName = "cmd.exe";
 86             //cmdP.StartInfo.UseShellExecute = false;
 87             //cmdP.StartInfo.RedirectStandardInput = true;
 88             //cmdP.StartInfo.RedirectStandardOutput = true;
 89             //cmdP.StartInfo.RedirectStandardError = true;
 90             //cmdP.StartInfo.CreateNoWindow = true;
 91             //cmdP.Start();
 92             //cmdP.StandardInput.WriteLine("shutdown -a");
 93             //cmdP.StandardInput.WriteLine("exit");
 94             //cmdP.WaitForExit();
 95             //cmdP.Close();
 96         }
 97         //创建进程用于打开,关闭定时关机
 98         private void MakeProcess(string cmd,params int[] time)
 99         {
100             
101             Process cmdP = new Process();
102             cmdP.StartInfo.FileName = "cmd.exe";//进程打开文件
103             cmdP.StartInfo.UseShellExecute = false;//是否启动系统外壳
104             cmdP.StartInfo.RedirectStandardInput = true;//是否从StandardInout输入
105             cmdP.StartInfo.RedirectStandardOutput = true;
106             cmdP.StartInfo.RedirectStandardError = true;
107             cmdP.StartInfo.CreateNoWindow = true;//启动程序时是否显示窗口
108             cmdP.Start();
109             if (time.Length<=0)
110             {
111                 cmdP.StandardInput.WriteLine(cmd);
112             }
113             else
114             {
115                 cmdP.StandardInput.WriteLine(cmd + time[0]);
116             }
117             cmdP.StandardInput.WriteLine("exit");
118             cmdP.WaitForExit();
119             cmdP.Close();
120         }
121 
122         private void Form1_Load(object sender, EventArgs e)
123         {
124             cboHour.SelectedIndex = Convert.ToInt32(DateTime.Now.Hour);
125             cboMinute.SelectedIndex = Convert.ToInt32(DateTime.Now.Minute);
126             lblDateTime.Text = DateTime.Now.ToString();
127         }
128     }
 1 设定好时间后的窗体  
 2  public partial class Form2 : Form
 3     {
 4         private int _time;
 5         private int hour = 0;
 6         private int minute = 0;
 7         private int second = 0;
 8 
 9         public int Time
10         {
11             get { return _time; }
12             set { _time = value; }
13         }
14         public Form2(int time)
15         {
16             this.Time = time;
17             hour = time / 3600;
18             minute = (time % 3600) / 60;
19             second = time % 60;
20             InitializeComponent();
21         }
22 
23         private void Form2_Load(object sender, EventArgs e)
24         {
25             lblDateTime.Text = DateTime.Now.ToString();
26             label2.Text = hour + "小时" + minute + "分钟" + second + "秒后";
27         }
28 
29         private void timer1_Tick(object sender, EventArgs e)
30         {
31             lblDateTime.Text = DateTime.Now.ToString();
32             Time = Time - 1;
33             hour = Time / 3600;
34             minute = (Time % 3600) / 60;
35             second = Time % 60;
36             label2.Text = hour + "小时" + minute + "分钟" + second + "秒后";
37         }
38 
39         private void MakeProcess(string cmd, params int[] time)
40         {
41 
42             Process cmdP = new Process();
43             cmdP.StartInfo.FileName = "cmd.exe";//进程打开文件
44             cmdP.StartInfo.UseShellExecute = false;//是否启动系统外壳
45             cmdP.StartInfo.RedirectStandardInput = true;//是否从StandardInout输入
46             cmdP.StartInfo.RedirectStandardOutput = true;
47             cmdP.StartInfo.RedirectStandardError = true;
48             cmdP.StartInfo.CreateNoWindow = true;//启动程序时是否显示窗口
49             cmdP.Start();
50             if (time.Length <= 0)
51             {
52                 cmdP.StandardInput.WriteLine(cmd);
53             }
54             else
55             {
56                 cmdP.StandardInput.WriteLine(cmd + time[0]);
57             }
58             cmdP.StandardInput.WriteLine("exit");
59             cmdP.WaitForExit();
60             cmdP.Close();
61         }
62 
63         private void btnCancle_Click(object sender, EventArgs e)
64         {
65             MakeProcess("shutdown -a");
66             MessageBox.Show("倒计时关机已取消");
67             this.Close();
68         }
69     }

可执行文件:

http://pan.baidu.com/s/1gfr4fcB

原文地址:https://www.cnblogs.com/pushudepu/p/5999201.html