C# 定时关机小应用(Winform)

一、简述

     记--使用winform实现的定时关机小应用。通过执行cmd命令实现的。(Visual Studio 2010旗舰版)

     例子打包:链接: https://pan.baidu.com/s/17cVw_nzo2QPqmHwIHK57Ww 提取码: shzm 

二、效果

三、工程结构及布局视图

四、源文件

Form1.cs文件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;namespace SetTime1
{public partial class Form1 : Form{public Form1(){InitializeComponent();lblNow.BackColor = Color.Gainsboro;}/// <summary>/// 窗体加载/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void Form1_Load(object sender, EventArgs e){try{//显示当前时间lblNow.Text = DateTime.Now.ToString("yyyy年MM月dd日hh时mm分ss秒");Timer timer = new Timer();timer.Tick += new EventHandler(this.timer_Tick);timer.Enabled = true;//不断捕获鼠标位置Timer timer1 = new Timer();timer1.Tick += new EventHandler(this.timer1_Tick);timer1.Enabled = true;//初始化模式一InitialModel1();//初始化重启模式InitialRset();//初始化模式2InitialModel2();}catch { }}/// <summary>/// 当前时间/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void timer_Tick(object sender, EventArgs e)//当前时间{try{//在标签上实时显示当前时间lblNow.Text = DateTime.Now.ToString("yyyy年MM月dd日HH时mm分ss秒");}catch{}}/// <summary>/// 窗体贴边/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void timer1_Tick(object sender, EventArgs e)//窗体贴边{try{int ScreenWidth = Screen.PrimaryScreen.WorkingArea.Width;  //获取屏幕宽度 int ScreenRight = Screen.PrimaryScreen.WorkingArea.Right; //获取屏幕高度 System.Drawing.Point mouse_pos = new Point(Cursor.Position.X, Cursor.Position.Y);//获取鼠标在屏幕的坐标点Rectangle Rects = new Rectangle(this.Left, this.Top, this.Left + this.Width, this.Top + this.Height);//存储当前窗体在屏幕的所在区域if ((this.Top < 0) && Win32API.PtInRect(ref Rects, mouse_pos))//当鼠标在当前窗体内,并且窗体的Top属性小于0{//如果窗体已经上贴边了并且鼠标在窗体内部,上贴边展开this.Top = 0;//设置窗体的Top属性为0}else if (this.Top > -5 && this.Top < 5 && !(Win32API.PtInRect(ref Rects, mouse_pos))){//当窗体的上边框与屏幕的顶端的距离小于5,并且鼠标不在窗体内部时this.Top = 5 - this.Height;//将窗体隐藏到屏幕的顶端,即上贴边}if ((this.Left >= ScreenWidth - 5) && Win32API.PtInRect(ref Rects, mouse_pos))//当鼠标在当前窗体内,并且窗体的Left属性小于ScreenWidth{//如果窗体已经右贴边了并且鼠标在窗体内部,右贴边展开this.Left = ScreenWidth - this.Width;//设置窗体的Left属性为ScreenWidth}else if (this.Right >= ScreenWidth && !(Win32API.PtInRect(ref Rects, mouse_pos))){//当窗体的右边框与屏幕的右端的距离小于+5时,并且鼠标不在窗体内部,右贴边this.Left = ScreenWidth - 5;//将窗体隐藏到屏幕的右端}}catch { }}#region 无边框窗体拖动//-------------------无边框窗体拖动---------------------------  Point mouseOff;//鼠标移动位置变量  bool leftFlag;//标志左键是否按下//鼠标按下private void Form_MouseDown(object sender, MouseEventArgs e){try{if (e.Button == MouseButtons.Left){mouseOff = new Point(-e.X, -e.Y); //记下鼠标移动的偏移量leftFlag = true;                  //点击左键按下时标注为true;  }}catch { }}//鼠标移动private void Form_MouseMove(object sender, MouseEventArgs e){try{if (leftFlag){Point mouseSet = Control.MousePosition;//获取鼠标的位置mouseSet.Offset(mouseOff.X, mouseOff.Y);  //设置移动后的位置  this.Location = mouseSet;//设置当前窗体的位置}}catch { }}//释放鼠标private void Form_MouseUp(object sender, MouseEventArgs e){if (leftFlag){leftFlag = false;//释放鼠标后标注为false;  }}[DllImport("user32.dll")]public static extern bool ReleaseCapture();[DllImport("user32.dll")]public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);public const int WM_SYSCOMMAND = 0x0112;public const int SC_MOVE = 0xF010;public const int HTCAPTION = 0x0002;private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e){try{ReleaseCapture();SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);}catch { }}//------------------------end 无边框窗体拖动-----------------------------------  #endregion/// <summary>/// 关闭窗口/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnClose_Click(object sender, EventArgs e){this.Close();}//关闭窗口/// <summary>/// 最小化/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnMin_Click(object sender, EventArgs e)//最小化{//将窗体最小化this.WindowState = FormWindowState.Minimized;}/// <summary>/// 初始化模式1/// </summary>void InitialModel1()//初始化模式1{try{int item = 0;//在小时下拉框添加(0~12)选项while (item <= 12){cbbHours1.Items.Add(item);cbbHours1.SelectedIndex = 0;item++;}//在分钟下拉框添加(0~59)选项for (item = 0; item <= 0x3b; item++){cbbMins1.Items.Add(item);cbbMins1.SelectedIndex = 0;}//在秒下拉框添加(0~59)选项for (item = 0; item <= 0x3b; item++){cbbSeconds1.Items.Add(item);cbbSeconds1.SelectedIndex = 0;}}catch { }}/// <summary>/// 命令函数 (通过黑窗口执行命令)/// </summary>/// <param name="str">命令</param>private void Cmd(string str)//命令函数{try{using (Process process = new Process()){process.StartInfo.FileName = "cmd.exe";//调用cmd.exe程序process.StartInfo.UseShellExecute = false;process.StartInfo.RedirectStandardInput = true;//重定向标准输入process.StartInfo.RedirectStandardOutput = true;//重定向标准输出process.StartInfo.RedirectStandardError = true;//重定向标准出错process.StartInfo.CreateNoWindow = true;//不显示黑窗口process.Start();//开始调用执行process.StandardInput.WriteLine(str + "&exit");//标准输入str + "&exit",相等于在cmd黑窗口输入str + "&exit"process.StandardInput.AutoFlush = true;//刷新缓冲流,执行缓冲区的命令,相当于输入命令之后回车执行process.WaitForExit();//等待退出process.Close();//关闭进程}}catch{}}/// <summary>/// 模式1确定/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSure1_Click(object sender, EventArgs e)//模式1确定{try{string strHour = cbbHours1.Items[cbbHours1.SelectedIndex].ToString();//小时string strMin = cbbMins1.Items[cbbMins1.SelectedIndex].ToString();//分钟string strSec = cbbSeconds1.Items[cbbSeconds1.SelectedIndex].ToString();//秒数if (((cbbHours1.SelectedIndex != 0) || (cbbMins1.SelectedIndex != 0)) || (cbbSeconds1.SelectedIndex != 0)){this.Cmd("shutdown -a");//取消之前的关机任务//组织关机命令string strCmd = "shutdown -s -t " + (((((Convert.ToInt32(strHour) * 60) * 60) + (Convert.ToInt32(strMin) * 60)) + Convert.ToInt32(strSec))).ToString();this.Cmd(strCmd);//调用cmd执行命令//弹出消息框告知用户MessageBox.Show("计算机将在" + strHour + "小时" + strMin + "分" + strSec + "秒后关机");}else{MessageBox.Show("选择无效!");}}catch { }}/// <summary>/// 取消关机计划/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnCancel1_Click(object sender, EventArgs e)//取消关机计划{this.Cmd("shutdown -a");//调用cmd执行取消关机命令}/// <summary>/// 重启模式/// </summary>void InitialRset()//初始化重启模式{try{int item = 0;//在小时下拉框添加(0~12)选项while (item <= 12){cbbHoursRset.Items.Add(item);cbbHoursRset.SelectedIndex = 0;item++;}//在分钟下拉框添加(0~59)选项for (item = 0; item <= 0x3b; item++){cbbMinsRset.Items.Add(item);cbbMinsRset.SelectedIndex = 0;}//在秒下拉框添加(0~59)选项for (item = 0; item <= 0x3b; item++){cbbSecondsRset.Items.Add(item);cbbSecondsRset.SelectedIndex = 0;}}catch { }}/// <summary>/// 确认重启/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSureRset_Click(object sender, EventArgs e)//重启模式{try{//获取用户选择的时间string strHour = cbbHoursRset.Items[cbbHoursRset.SelectedIndex].ToString();//小时string strMin = cbbMinsRset.Items[cbbMinsRset.SelectedIndex].ToString();//分钟string strSec = cbbSecondsRset.Items[cbbSecondsRset.SelectedIndex].ToString();//秒this.Cmd("shutdown -a");//取消之前的关机任务//根据用户的选择组织关机命令string strCmd = "shutdown -r -t " + (((((Convert.ToInt32(strHour) * 60) * 60) + (Convert.ToInt32(strMin) * 60)) + Convert.ToInt32(strSec))).ToString();this.Cmd(strCmd);//调用cmd执行重启命令//弹出消息框告知用户MessageBox.Show("计算机将在" + strHour + "小时" + strMin + "分" + strSec + "秒后重启");}catch { }}/// <summary>/// 取消重启/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void BtnCancelRset_Click(object sender, EventArgs e)//取消重启{this.Cmd("shutdown -a");//取消关机任务}/// <summary>/// 初始化模式2/// </summary>void InitialModel2()//初始化模式2{try{int num;this.cbbMonths.Items.Clear();//清空月份下拉框//在月份下拉框添加1~12for (num = 1; num <= 12; num++){cbbMonths.Items.Add(num);}//默认选择当前月cbbMonths.SelectedIndex = DateTime.Now.Month - 1;this.cbbHours2.Items.Clear();//清空小时下拉框//在小时下拉框添加0~23for (num = 0; num <= 0x17; num++){this.cbbHours2.Items.Add(num);}//默认选择当前小时cbbHours2.SelectedIndex = DateTime.Now.Hour;this.cbbMins2.Items.Clear();//清空分钟下拉框、//在月份下拉框添加0~59for (num = 0; num <= 0x3b; num++){this.cbbMins2.Items.Add(num);}//默认选择当前秒cbbMins2.SelectedIndex = DateTime.Now.Minute;SetDay();//根据用户选择的月份选择天数(月份的天数有差异,有润平年之分)}catch { }}/// <summary>/// 设置模式2天数/// </summary>void SetDay()//设置模式2天数{try{int num;this.cbbDays.Items.Clear();//清空天数下拉框switch ((cbbMonths.SelectedIndex + 1)){case 1://1 3 5 7 8 10 12 月有31天case 3:case 5:case 7:case 8:case 10:case 12: for (num = 1; num <= 31; num++){cbbDays.Items.Add(num);}break;case 4://4 6 9 11月有30天case 6:case 9:case 11: for (num = 1; num <= 30; num++){cbbDays.Items.Add(num);}break;case 2: for (num = 1; num <= 28; num++)//2月至少有28天{cbbDays.Items.Add(num);}//闰年 2月 有29天if (((Convert.ToInt32(DateTime.Now.Year) % 400) == 0) || (((Convert.ToInt32(DateTime.Now.Year) % 4) == 0) && ((Convert.ToInt32(DateTime.Now.Year) % 100) != 0))){cbbDays.Items.Add(0x1d);//再加1天}break;default: break;}if (Convert.ToInt32(DateTime.Now.Day) > cbbDays.Items.Count){//当前天数大于可选天数,设置为27cbbDays.SelectedIndex = 27;}else{//默认选为当前天数cbbDays.SelectedIndex = Convert.ToInt32(DateTime.Now.Day) - 1;}}catch { }}/// <summary>/// 当月数改变天数随之改变/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void cbbMonths_SelectedIndexChanged(object sender, EventArgs e)//当月数改变天数随之改变{SetDay();}/// <summary>/// 获取设置模式2关机时间/// </summary>/// <returns>设置模式2关机时间</returns>private DateTime GetDTime()//获取设置模式2关机时间{try{string strYear = Convert.ToString(DateTime.Now.Year);string strMouth = this.cbbMonths.Items[this.cbbMonths.SelectedIndex].ToString();string strDay = this.cbbDays.Items[this.cbbDays.SelectedIndex].ToString();string strHour = this.cbbHours2.Items[this.cbbHours2.SelectedIndex].ToString();string strMin = this.cbbMins2.Items[this.cbbMins2.SelectedIndex].ToString();//跨年处理if ((DateTime.Now.Month == 12) && (this.cbbMonths.SelectedIndex == 0)){strYear = (DateTime.Now.Year + 1).ToString();}//返回设置的时间return Convert.ToDateTime(strYear + "-" + strMouth + "-" + strDay + " " + strHour + ":" + strMin + ":00");}catch{return DateTime.Now;//返回当前时间}}/// <summary>/// 计算模式2 获取离关机还有多少秒/// </summary>/// <param name="DateTime1">设置的关机时间</param>/// <param name="DateTime2">当前时间</param>/// <returns></returns>private double DateDiff(DateTime DateTime1, DateTime DateTime2)//计算模式2秒数{try{if (DateTime1 <= DateTime2)//关机时间必须是大于当前时间{return 0.0;}//返回记录关机的秒数return DateTime1.Subtract(DateTime2).Duration().TotalSeconds;}catch{return -1.0;}}/// <summary>/// 模式2确定/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSure2_Click(object sender, EventArgs e)//模式2确定{try{this.Cmd("shutdown -a");//取消之前的关机任务DateTime dTime = this.GetDTime();//获取关机时间double sec = this.DateDiff(dTime, DateTime.Now);//获取离关机还有多少秒//关机时间分为2秒~3天if ((sec > 2.0) && (sec < 259200.0)){this.Cmd("shutdown -a");//取消之前的关机任务//执行关机命令this.Cmd("shutdown -s -t " + Convert.ToInt32(sec.ToString().Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries)[0]).ToString());//弹出消息框提示用户MessageBox.Show("计算机将于" + this.GetDTime().ToString() + "关机");}else{MessageBox.Show("选择无效!!!");}}catch { }}/// <summary>/// 模式2取消/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnCancel_Click(object sender, EventArgs e)// 模式2取消{Cmd("shutdown -a");//取消关机任务}/// <summary>/// 当选项卡为模式2时,重置时间/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)//当选项卡为模式2时,重置时间{if (tabControl1.SelectedIndex == 1){InitialModel2();}}}class Win32API //拖动接口{[DllImport("User32.dll")]public static extern bool PtInRect(ref Rectangle r, Point p);}}

五、总结

      1、cmd关机相关命令

          取消任务命令:shutdown -a

          重启命令:shutdown -r -t sec         (于sec秒后重启)

          关机命令:shutdown -s -t sec        (于sec秒后关机)

                            at 23:00 shutdown -s        (在23:00执行shutdown -s,即在23:00关机。)

at 某个时间 执行某个动作/应用  (win7测试管理员权限)

取消at计划(1是ID)

      2、更改应用图标

                               

3、窗体设置为无边框样式之后,就拖动不了了。可以通过监听鼠标动作,在窗体范围内,窗体跟随鼠标的移动。对于贴边其实就是设置窗体的位置。

4、调用第三方程序

                    Process process = new Process()//创建进程process.StartInfo.FileName = exePath;//exePath:调用程序的路径process.Start();//开始调用执行process.WaitForExit();//等待退出process.Close();//关闭进程

C# 定时关机小应用相关推荐

  1. windows 定时关机小脚本

    windows 定时关机小脚本 在使用Windows时开关机总是有些麻烦,这里我写了一个一键关机以及定时关机两个小脚本供大家下载使用(下载后新建文本文档复制到文本中然后将后缀名改为.bat 即可运行) ...

  2. c#自己做的定时关机小程序附加源代码

    学c#已经2个星期了,今天心血来潮想用来做一点东西出来,真好电脑想给电脑整个定时关机功能,不然每次想要定时关机还要自己打开控制台真麻烦. 原理很简单利用控制台的"shutdown.exe - ...

  3. C++定时关机小程序

    很久之前就了解了c语言有system("shutdown -s -t xx");定时关机功能.但是windows系统上并没有这个功能,于是自己写了一个关于定时关机的小程序.用vs2 ...

  4. JAVA定时关机小程序

    大一刚学java时候做的小程序.由于当时迅雷还没有下载完成关机,晚上要下很多学习资料.只有自己算时间然后通过shutdown命令设置时间关机. 当时通过shutwodn命令,想到能否通过java做一个 ...

  5. Python练习小程序 定时关机小脚本

    就不多介绍了,直接上代码吧. #coding:utf-8 import datetime, time, os, wx import tkinter, threading from tkinter im ...

  6. python定时关机程序_Python练习小程序之定时关机小脚本(代码教程)

    就不多介绍了,直接上代码吧. #coding:utf-8 import datetime, time, os, wx import tkinter, threading from tkinter im ...

  7. 福利定时关机小工具,定时器,定时关机,定时休眠

    分享一个定时器桌面软件. 可以定时,定时关机,定时休眠,定时锁屏等功能!! 无广告,无插件,无病毒的三无产品!! 使用简单无脑,打开即用! //定时if (type=="定时"){ ...

  8. C语言定时关机小程序

    #include <stdio.h> #include <stdlib.h> #include<conio.h> #include<windows.h> ...

  9. 定时关机小助手【1.1】

    有时还真的必须设定电脑在某个时间后关机.因为人走开了,想让机器继续工作嘛! 这些软件到处都有,但就是不知有没有病毒了.于是,自己动手,丰衣足食! 简简单单,简单就是幸福.以后再考虑增加些实用的功能. ...

  10. win10定时关机c语言,win10定时关机在哪?win10设置定时关机的三种方法

    win10定时关机在哪?很多win10用户可能还不会设置定时关机,下面脚本之家小编就给大家带来win10设置定时关机的三种方法,一起来看看吧! 方法一:Win10定时关机命令:shutdown –s ...

最新文章

  1. linux rpm找不到命令_Linux安装软件
  2. Nature Human Behavior:大脑对不公平的反应有助预测抑郁症
  3. python网页编程测试_李亚涛:python编写友情链接检测工具
  4. 【转】ABAP BASE64编码与解码练习
  5. linux26内核,Linux26内核对象机制研究.pdf
  6. python正则获取网页标签里面的内容
  7. linux phpunit 安装,在CentOS 7/CentOS 8系统中安装PHPUnit的方法
  8. python基础语法实验要求_Python基础语法-关于条件
  9. 西昌学院计算机科学与技术好不好,西昌学院好不好评价怎么样
  10. [20150304]唯一索引与阻塞.txt
  11. Topcomponent --sighoff
  12. 修改jar 注入_Apache Tika命令注入漏洞挖掘
  13. centos mysql无法启动 sock_CentOS通过yum安装MariaDB(MySQL)无法启动服务或者找不到mysql.sock...
  14. 腾讯云与同方全球人寿签署战略合作 “云+保险”合作伙伴队伍再壮大
  15. Handler通信 源码分析和手写Handler框架
  16. 安卓手机app开发之微信app支付【绝对干货】h5打包apk调用微信app支付不再困惑
  17. linux运行多线程语句,linux多线程中使用system函数后时而程序崩溃,求助!!!...
  18. 企业微信h5开发(即JS-SDK),一不小心,就会掉进坑,进入死胡同
  19. 超线程cpu的寄存器_我对超线程我的理解
  20. HTML为标题栏添加图片

热门文章

  1. Win10禁用缩略图解决资源管理器老是重启
  2. 荣事达Royalstar无叶暖风机——功能逻辑与能耗分析
  3. 打开我的收藏夹 -- Python数据分析杂谈
  4. 深入理解裸机与RTOS开发模式
  5. docker在centos7中run时遇到的坑?
  6. yum 装包时,提示Peer cert cannot be verified or peer cert invalid
  7. oFono学习笔记(一):oFono中增加消息与接口
  8. 快乐大本营html5小游戏,快乐大本营小游戏规则-新年小游戏.doc
  9. 再摸shopnc——修改运费模板
  10. 复兴号为什么不能超载?_接下来:什么都没有? 信息超载如何影响我们的大脑。...