文档章节

C#关机小程序

JavaSwing
 JavaSwing
发布于 2016/11/29 11:09
字数 1338
阅读 10
收藏 0
这是我自己用所学习的C#  做的一个关机小程序,功能不多,只是为了练手下面是运行的效果图:



源码:
1
using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 11 /* 12 * 13 * 整理:张晓天

 

 14  * Q Q:977602650
 15  * 日期:2012-03-29
 16  * 
 17  */
 18 namespace ExitComputer
 19 {
 20     public partial class Form1 : Form
 21     {
 22         int goTime = 0;//程序运行时间
 23         string cmd = null;//写入shutdown的命令
 24         int countTime = 0;//到程序执行的时间
 25         public Form1()
 26         {
 27             InitializeComponent();
 28         }
 29 
 30         /// <summary>
 31         /// 窗体加载事件
 32         /// </summary>
 33         /// <param name="sender"></param>
 34         /// <param name="e"></param>
 35         private void Form1_Load(object sender, EventArgs e)
 36         {
 37             nfiPic.Icon = this.Icon;//指定系统的图标
 38 
 39             label1.Text = DateTime.Now.ToString("yyyy年 MM月 dd日 HH :mm :ss");//系统时间
 40             nudHour.Maximum = 23;
 41             nudMinutes.Maximum = 59;
 42             nudSecond.Maximum = 59;//指定控件的最大值
 43             cboMonth.Text = DateTime.Now.Month.ToString();
 44             cboDay.Text = DateTime.Now.Day.ToString();
 45             nudHour.Value = DateTime.Now.Hour;
 46             nudMinutes.Value = DateTime.Now.Minute;
 47             nudSecond.Value = DateTime.Now.Second;//指定控件的值
 48             //指定时间控件发生的频率
 49             tmrTime.Interval = 1000;
 50             tmrTime.Enabled = true;
 51             //为月和日赋值
 52             for (int i = 1; i < 13; i++)
 53             {
 54                 cboMonth.Items.Add(i);
 55             }
 56 
 57             for (int i = 1; i < 32; i++)
 58             {
 59                 cboDay.Items.Add(i);
 60             }
 61             //指定不可用的控件
 62             cboMonth.Enabled = false;
 63             cboDay.Enabled = false;
 64             nudHour.Enabled = false;
 65             nudMinutes.Enabled = false;
 66             nudSecond.Enabled = false;
 67             btnExit.Enabled = false;
 68 
 69         }
 70 
 71         //定时的属性改写时事件
 72         private void chkTiming_CheckedChanged(object sender, EventArgs e)
 73         {
 74             if (chkTiming.Checked == true)
 75             {
 76                 cboMonth.Enabled = true;
 77                 cboDay.Enabled = true;
 78                 nudHour.Enabled = true;
 79                 nudMinutes.Enabled = true;
 80                 nudSecond.Enabled = true;
 81 
 82             }
 83             else
 84             {
 85                 cboMonth.Enabled = false;
 86                 cboDay.Enabled = false;
 87                 nudHour.Enabled = false;
 88                 nudMinutes.Enabled = false;
 89                 nudSecond.Enabled = false;
 90 
 91             }
 92 
 93         }
 94 
 95         /// <summary>
 96         /// 显示窗体
 97         /// </summary>
 98         private void windowShow()
 99         {
100             this.Show();
101             this.ShowInTaskbar = true;
102             this.WindowState = FormWindowState.Normal;
103         }
104 
105         //重写事件实现气泡提示
106         protected override void OnSizeChanged(EventArgs e)
107         {
108             base.OnSizeChanged(e);
109             if (WindowState == FormWindowState.Minimized)
110             {
111                 nfiPic.ShowBalloonTip(30);
112             }
113         }
114 
115         /// <summary>
116         /// 隐藏托盘
117         /// </summary>
118         private void windowHide()
119         {
120             this.Hide();
121             this.ShowInTaskbar = false;
122             nfiPic.Visible = true;
123             nfiPic.ShowBalloonTip(30);
124         }
125 
126         //最小化窗体时的事件
127         private void Form1_Resize(object sender, EventArgs e)
128         {
129             if (this.WindowState == FormWindowState.Minimized)
130 
131                 this.windowHide();
132         }
133 
134         //鼠标双击托盘图标时的事件
135         private void nfiPic_MouseDoubleClick(object sender, MouseEventArgs e)
136         {
137             this.windowShow();
138         }
139 
140         //保证选择的月份是正确的
141         private void cboMonth_TextChanged(object sender, EventArgs e)
142         {
143             try
144             {
145                 int temp1 = int.Parse(cboMonth.Text);
146                 int temp = int.Parse(cboDay.Text);
147                 if (temp1 < 1 || temp1 > 12)
148                 {
149                     cboMonth.Text = DateTime.Now.Month.ToString();
150                 }
151 
152                 if (cboMonth.Text == "2")
153                 {
154                     if (DateTime.IsLeapYear(DateTime.Now.Year) == true)//判断今年是否为闰年
155                     {
156                         if (temp > 28)
157                         {
158                             cboDay.Text = DateTime.Now.Day.ToString();
159                         }
160                     }
161                     else if (temp > 29)
162                     {
163                         cboDay.Text = DateTime.Now.Day.ToString();
164                     }
165                 }
166                 else if (cboMonth.Text == "4" || cboMonth.Text == "6" || cboMonth.Text == "9" || cboMonth.Text == "11")
167                 {
168                     if (temp > 30)
169                     {
170                         cboDay.Text = DateTime.Now.Day.ToString();
171                     }
172                 }
173             }
174             catch (Exception)
175             {
176 
177                 cboMonth.Text = DateTime.Now.Month.ToString();
178             }
179 
180         }
181 
182         //保证选择的天数是正确的
183         private void cboDay_TextChanged(object sender, EventArgs e)
184         {
185             try
186             {
187                 int temp = int.Parse(cboDay.Text);
188                 if (temp < 1 || temp > 31)
189                 {
190                     cboDay.Text = DateTime.Now.Day.ToString();
191                 }
192                 //判断月份
193                 if (cboMonth.Text == "2")
194                 {
195                     if (DateTime.IsLeapYear(DateTime.Now.Year) == true)//判断今年是否为闰年
196                     {
197                         if (temp > 28)
198                         {
199                             cboDay.Text = DateTime.Now.Day.ToString();
200                         }
201                     }
202                     else if (temp > 29)
203                     {
204                         cboDay.Text = DateTime.Now.Day.ToString();
205                     }
206                 }
207                 else if (cboMonth.Text == "4" || cboMonth.Text == "6" || cboMonth.Text == "9" || cboMonth.Text == "11")
208                 {
209                     if (temp > 30)
210                     {
211                         cboDay.Text = DateTime.Now.Day.ToString();
212                     }
213                 }
214             }
215             catch (Exception)
216             {
217 
218                 cboDay.Text = DateTime.Now.Day.ToString();
219             }
220         }
221 
222         //程序执行时给CountTime赋的值
223         private bool timeControl()
224         {
225             if (chkTiming.Checked == true)
226             {
227                 DateTime startTime = Convert.ToDateTime(DateTime.Now.Year.ToString() + "/" + cboMonth.Text + "/" +
228                  cboDay.Text + " " + nudHour.Value.ToString() + ":" + nudMinutes.Value.ToString() + ":" + nudSecond.Value.ToString());
229                 TimeSpan endtime = startTime - DateTime.Now;
230                 countTime = endtime.Days * 86400 + endtime.Hours * 3600 + endtime.Minutes * 60 + endtime.Seconds;
231             }
232             if (countTime < 0)
233             {
234 
235                 MessageBox.Show("对不起!您选择的时间有误!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
236                 //让窗体回到初始化时的状态
237                 chkTiming.Enabled = true;
238                 btnLogout.Enabled = true;
239                 btnOver.Enabled = true;
240                 btnAgain.Enabled = true;
241                 btnExit.Enabled = false;
242                 tmrTime.Enabled = false;
243                 return false;
244             }
245             tmrTime.Enabled = true;
246             return true;
247         }
248 
249         //时间控件每次发生的事件
250         private void tmrTime_Tick(object sender, EventArgs e)
251         {
252             label1.Text = DateTime.Now.ToString("yyyy年 MM月 dd日 HH :mm :ss");
253             if (cmd != null)
254             {
255                 goTime += 1;
256                 if (countTime - goTime + 5 < 0)
257                 {
258                     txtRemind.Text = "0";
259                     cmd = null;
260                 }
261                 else
262                 {
263                     //在提示文本中显示的内容
264                     int temp = countTime - goTime + 1;
265                     txtRemind.Text = temp / 86400 + "" + temp % 86400 / 3600 + "" + temp % 3600 / 60 + "" + temp % 60 + "";
266                     if (countTime - goTime + 1 == 0)  //判断时间是否到了
267                     {
268                         System.Diagnostics.ProcessStartInfo p1 = new System.Diagnostics.ProcessStartInfo("shutdown.exe", cmd);
269                         p1.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
270                         System.Diagnostics.Process.Start(p1);
271                         Application.ExitThread();
272                         Application.Exit();//程序结束
273                     }
274                 }
275             }
276         }
277 
278         /// <summary>
279         /// 定时关机事件
280         /// </summary>
281         /// <param name="sender"></param>
282         /// <param name="e"></param>
283         private void btnOver_Click(object sender, EventArgs e)
284         {
285             if (!timeControl()) return;
286             cmd = "-s -t 0";
287             lblRemind.Text = "剩余时间";
288             chkTiming.Checked = false;
289             chkTiming.Enabled = false;
290             btnExit.Enabled = true;
291             Allow();
292 
293         }
294 
295         /// <summary>
296         /// 重启事件
297         /// </summary>
298         /// <param name="sender"></param>
299         /// <param name="e"></param>
300         private void btnAgain_Click(object sender, EventArgs e)
301         {
302             if (!timeControl()) return;
303             cmd = "-r -t 0";
304             lblRemind.Text = "剩余时间";
305             chkTiming.Checked = false;
306             chkTiming.Enabled = false;
307             btnExit.Enabled = true;
308             Allow();
309         }
310 
311         private void btnLogout_Click(object sender, EventArgs e)
312         {
313             if (!timeControl()) return;
314             cmd = "-l";
315             lblRemind.Text = "剩余时间";
316             chkTiming.Checked = false;
317             chkTiming.Enabled = false;
318             btnExit.Enabled = true;
319             Allow();
320         }
321 
322         private void tsmiShow_Click(object sender, EventArgs e)
323         {
324             this.windowShow();
325         }
326 
327         private void tsmiExit_Click(object sender, EventArgs e)
328         {
329             this.Dispose();
330         }
331 
332         /// <summary>
333         /// 单击取消发生的事件
334         /// </summary>
335         /// <param name="sender"></param>
336         /// <param name="e"></param>
337         private void btnExit_Click(object sender, EventArgs e)
338         {
339             btnLogout.Enabled = true;
340             btnOver.Enabled = true;
341             btnAgain.Enabled = true;
342             btnExit.Enabled = false;
343             cmd = null;
344             goTime = 0;
345             countTime = 0;
346             txtRemind.Text = "0";
347             lblRemind.Text = "关机提示";
348             chkTiming.Enabled = true;
349             MessageBox.Show("任务已被成功取消", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
350 
351         }
352 
353 
354         /// <summary>
355         /// 提醒事件
356         /// </summary>
357         public void Allow()
358         {
359             DialogResult result;
360             result = MessageBox.Show("程序将自动最小化到托盘", "操作提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
361             if (result == DialogResult.Yes)
362             {
363                 this.windowHide();
364             }
365         }
366 
367     }
368 }



源码打包下载:这里

本文转载自:http://www.cnblogs.com/zxdBlog/archive/2012/09/18/2690223.html

JavaSwing
粉丝 21
博文 44
码字总数 8095
作品 0
杭州
程序员
私信 提问
C#关机代码实例详解

C#关机代码是如何执行的呢?那么这段代码主要使用的是P/Invoke技术,如果对这个技术还未有接触,请花一些时间学习一下。P/Invoke不是一个能在一篇帖子里能讲明白的东西。 C#关机代码这段代码...

zting科技
2017/01/12
0
0
visual c#设计的多功能关机程序

Visual C#设计多功能关机程序 许多软件都有自动关机功能,特别是在长时间下载的时候,这个功能可是使你不用以守候在计算机前面,而电脑却能按照您事先的设定自动关闭。现在我们用visualC#来编...

crossmix
2015/02/20
123
0
用 C# 代码如何实现让你的电脑关机,重启,注销,锁定,休眠,睡眠

原文:用 C# 代码如何实现让你的电脑关机,重启,注销,锁定,休眠,睡眠 简介 本文讲述了用 C# 代码如何实现让你的电脑关机,重启,注销,锁定,休眠,睡眠。 如何实现 首先,使用 using 语句...

杰克.陈
2018/01/05
0
0
C# xml和对象的序列化与反序列化

为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中;内存中的对象如果需要传递给其他系统使用;或者在关机时需要保存下来以便下次再次启动程序使用就需要序列化和反序列化。...

KavenSu
2014/02/21
634
0
多进程监控自动关机工具升级远程关闭多台server——C# works with PowerShell

之前给单位做过一个多进程监控的自动关机工具,详见那篇blog。 这次领导又加了需求,说要等进程监控结束后,不止需要关闭主控端server,还需要关闭其他servers。于是就用到了我上篇文章所介绍...

天外归云
2015/08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
20分钟前
6
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
32分钟前
3
0
jenkins 插件下载加速最终方案

推荐做法 1、告诉jenkins 我哪些插件需要更新 jenkins插件清华大学镜像地址 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 1.进入jenkins系统管理 2.进入插件管...

vasks
38分钟前
4
0
composer爆错:zlib_decode():data error

解决办法:先用 composer diagnose 命令检测 然后 composer self-update 更新composer版本 最后执行 composer update 或者 composer install composer 切换阿里云镜像 用起来还快 composer c...

koothon
45分钟前
4
0
shangcheng-my

1.数据库主键、外键类型为bigint,那么在后台应该用什么类型的变量定义? 后台用string接收,因为前段传过来的一般都是json字符串,后台直接接收,mysql是可以吧数字类型的字符串转换为对应的...

榴莲黑芝麻糊
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部