吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6744|回复: 28
收起左侧

[其他转载] C# 定时关机 定时执行程序 结束任务

[复制链接]
一蓑烟雨任余年 发表于 2020-5-22 17:15
主窗口:
模式包含:指定时间 \ 倒计时 image.png 其它事件:
动作包含: 关机 重启 其它事件

image.png
比市场上最常用的关机软件多了几个功能
1、定时的指定时间 最大可以指定到某天
2、可以定时打开某个文件 某个程序
3、可以定时关闭某个文件 某个程序(只需填写PID)
进程PID获取方式:
image.png

如有需要可以下载EXE执行文件 DateTime.7z (6.79 KB, 下载次数: 616)
如有需要可以参考关键源码 如下:
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DateTime
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public System.TimeSpan Ts_sumtime;//指定时间 与现在时间的时间差
        public System.TimeSpan Ts_sumtimeCD;//倒计时加上小时和分钟数 与现在时间的时间差
        
        System.DateTime dtpnewdatenosec;//记录按照指定时间后 指定时间的seconds归零
        System.DateTime CDdtpnewdatenosec;//记录按照倒计时后 指定时间的seconds归零
        public void btn_start_Click(object sender, EventArgs e)
        {
            StartExecute();
        }

        public void StartExecute()
        {
            if (cob_type.SelectedIndex == 1)//如果选择的是倒计时
            {
                CDdtpnewdatenosec = System.DateTime.Now.AddHours(dtp.Value.Hour).AddMinutes(dtp.Value.Minute); //new System.DateTime(System.DateTime.Now.Hour + dtp.Value.Hour+dtp.Value.Minute);
            }

            if (btn_start.Text == "取消执行")//取消执行要做的事情
            {
                InitializePro(true, true, true, false, false, "开始执行", 0);
                timer1.Stop();
                //窗体传值的全局变量要初始化为“”
                textBox1Value = "";
                textBox2Value = "";
            }
            else
            {
                //初始化
                InitializePro(false, false, false, true, true, "取消执行", 0);
                dtpnewdatenosec = new System.DateTime(dtp.Value.Year, dtp.Value.Month, dtp.Value.Day, dtp.Value.Hour, dtp.Value.Minute, 0);
                Ts_sumtime = dtpnewdatenosec - System.DateTime.Now;
                Ts_sumtimeCD = CDdtpnewdatenosec - System.DateTime.Now;
                if (Ts_sumtime.TotalSeconds < 0 && cob_type.SelectedIndex == 0)
                {
                    MessageBox.Show("指定的时间必须大于当前时间", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    InitializePro(true, true, true, false, false, "开始执行", 0);
                }
                else if (cob_type.SelectedIndex == 0)
                {
                    pgb_time.Maximum = (int)Ts_sumtime.TotalSeconds;
                    btn_start.Text = "取消执行";
                    timer1.Start();
                    timer1.Interval = 1000;

                }
                else if (cob_type.SelectedIndex == 1)
                {
                    pgb_time.Maximum = (int)Ts_sumtimeCD.TotalSeconds;
                    btn_start.Text = "取消执行";
                    timer1.Start();
                    timer1.Interval = 1000;
                }

            }
        }

        private void cob_type_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (cob_type.SelectedIndex)
            {
                case 0:
                    dtp.CustomFormat = "dd日 HH时 mm分";
                    dtp.Value = System.DateTime.Now;
                    break;
                case 1:

                    dtp.Value = System.DateTime.Now;
                    dtp.CustomFormat = "HH小时 mm分钟";
                    dtp.Value = new System.DateTime(2000, 1, 1, 0, 30, 0);
                    break;
                
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dtp.Format = DateTimePickerFormat.Custom;
            dtp.CustomFormat = "dd日 HH时 mm分";
            cob_type.SelectedIndex = 0;
            cob_action.SelectedIndex = 0;
            //DateTime d = new DateTime();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            AppointTime();

        }
        private void AppointTime()
        {
            System.TimeSpan currentTS = System.TimeSpan.Zero;//记录时间差
            if (cob_type.SelectedIndex == 1)//如果是倒计时模式
            {
                currentTS = CDdtpnewdatenosec - System.DateTime.Now;
            }
            else if (cob_type.SelectedIndex == 0)//如果是指定时间
            {
                currentTS = dtpnewdatenosec - System.DateTime.Now;
            }

            if (pgb_time.Value < pgb_time.Maximum)
            {
                pgb_time.Value += 1;
            }
            else//到终点 开始执行预先设置
            {
                timer1.Stop();
                InitializePro(true, true, true, false, false, "开始执行", 0);
                Action();
            }

            lbl_msg.Text = currentTS.Days + "天" + currentTS.Hours + "小时" + currentTS.Minutes + "分" + currentTS.Seconds + "秒" + "后系统将执行" + cob_action.SelectedItem.ToString();
        }

        public void InitializePro(bool action_Enabled, bool Type_enable, bool dtp_Enable, bool lbl_msg_Visible,
            bool pgb_time_Visible, string btn_text, int pgb_Value)
        {
            cob_action.Enabled = action_Enabled;
            cob_type.Enabled = Type_enable;
            dtp.Enabled = dtp_Enable;

            lbl_msg.Text = "";//操作显示提醒
            lbl_msg.Visible = lbl_msg_Visible;
            pgb_time.Visible = pgb_time_Visible;//进度条可见

            btn_start.Text = btn_text;
            pgb_time.Value = pgb_Value;
        }
        public void Action()
        {
            switch (cob_action.SelectedIndex)
            {
                case 0://关机
                    System.Diagnostics.Process.Start("shutdown.exe","-s -f -t 0");
                    break;
                case 1://重启
                    System.Diagnostics.Process.Start("shutdown.exe", "-r -f -t 0");
                    break;
                case 2:
                    //执行其它功能
                    OtherFunc();
                    break;
                default:
                    break;
            }
        }
        private static string textBox1Value;//窗体传值 接收path
        private static string textBox2Value;//窗体传值 接收PID
        //窗体传值
        public static string TextBox1Value { get => textBox1Value; set => textBox1Value = value; }
        public static string TextBox2Value { get => textBox2Value; set => textBox2Value = value; }
        public void OtherFunc()//执行其它功能的选项
        {
            if (textBox1Value!="")
            {
                ProcessStartInfo psi = new ProcessStartInfo(textBox1Value);

                Process.Start(psi);
                
                
            }
            else if(textBox2Value!="")
            {
                Process p = Process.GetProcessById(Convert.ToInt32(textBox2Value));
                p.Kill();
            }
        }
        public static int ShowTime=0;
        public static fm_OtherAction fm;

        

        private void cob_action_SelectedIndexChanged(object sender, EventArgs e)
        {
            //执行其它时间需要加载对应窗口  单例模式
            if (cob_action.SelectedIndex==2)
            {
                if (fm==null)
                {
                    fm = new fm_OtherAction();
                    fm.Show();
                }
                else
                {
                    fm.Visible = true;
                    fm.Show();
                }
                //fm_OtherAction fm = new fm_OtherAction();
                
                ShowTime = 1;
            }

        }
    }
}

免费评分

参与人数 5吾爱币 +3 热心值 +5 收起 理由
lostmdos + 1 + 1 我很赞同!
bandpfqf + 1 谢谢@Thanks!
shen12wang + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zhJason + 1 楼主真棒,谢谢分享,学习学习
鬼子来了666 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

酒醉三分呆 发表于 2020-5-28 15:54
TiMiii 发表于 2020-5-26 09:47
大佬。能否修改添加设置每天指定时间执行打开某个程序,最近用服务器在挂一个东西,需要每天指定时间运行一 ...

可以,.net 设置定时任务就行了 设定时间段执行某个事件
AI52 发表于 2020-5-22 18:28
一蓑烟雨任余年 发表于 2020-5-22 18:17
只有关机 重启 以及执行其它事件
睡眠和锁屏这些基础代码太简单 没必要写太多

他的意思好像是, 电脑锁屏或休眠后,能否后台任然运行执行命令。
火蜥蜴 发表于 2020-5-22 17:22
猫吃 发表于 2020-5-22 17:43
系统睡眠或者锁屏也可以执行么?
 楼主| 一蓑烟雨任余年 发表于 2020-5-22 18:17
猫吃 发表于 2020-5-22 17:43
系统睡眠或者锁屏也可以执行么?

只有关机 重启 以及执行其它事件
睡眠和锁屏这些基础代码太简单 没必要写太多
豆仔1222 发表于 2020-5-22 18:45
感谢楼主分享,这个挺不错的。
飘缈孤鸿影 发表于 2020-5-22 23:37
感谢分享
TiMiii 发表于 2020-5-26 09:47
大佬。能否修改添加设置每天指定时间执行打开某个程序,最近用服务器在挂一个东西,需要每天指定时间运行一次打开某个程序。
shen12wang 发表于 2020-5-26 21:01
可以。谢谢。
以前有过这想法,但水平有限
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 06:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表