zoukankan      html  css  js  c++  java
  • 自动关机代码

    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;
    
    namespace AutoShutDown
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.btnStop.Enabled = false;
            }
    
            int count = 0;
            int maxCount = 0;
            private void btnStart_Click(object sender, EventArgs e)
            {
                maxCount = (int)this.udTimeout.Value;
                count = 0;
                this.timer1.Interval = 60000;
                this.timer1.Start();
                this.btnStart.Enabled = this.udTimeout.Enabled = false;
                this.btnStop.Enabled = true;
                this.lblInfo.Text = string.Format("{0}分钟", maxCount);
            }
    
            private void btnStop_Click(object sender, EventArgs e)
            {
                this.timer1.Stop();
                this.btnStart.Enabled = this.udTimeout.Enabled = true;
                this.btnStop.Enabled = false;
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                count++;
                if (count >= maxCount)
                {
                    this.timer1.Stop();
                    ShutDown.DoExitWin(ShutDown.EWX_SHUTDOWN);
                }
                this.lblInfo.Text = string.Format("{0}分钟", maxCount - count);
            }
        }
    
        public class ShutDown
        {
            [StructLayout(LayoutKind.Sequential, Pack = 1)]
            internal struct TokPriv1Luid
            {
                public int Count;
                public long Luid;
                public int Attr;
            }
    
            [DllImport("kernel32.dll", ExactSpelling = true)]
            internal static extern IntPtr GetCurrentProcess();
    
            [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
            internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
    
            [DllImport("advapi32.dll", SetLastError = true)]
            internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
    
            [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
            internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall, ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);
    
            [DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
            internal static extern bool ExitWindowsEx(int flg, int rea);
    
            internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
            internal const int TOKEN_QUERY = 0x00000008;
            internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
            internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
            internal const int EWX_LOGOFF = 0x00000000;
            internal const int EWX_SHUTDOWN = 0x00000001;
            internal const int EWX_REBOOT = 0x00000002;
            internal const int EWX_FORCE = 0x00000004;
            internal const int EWX_POWEROFF = 0x00000008;
            internal const int EWX_FORCEIFHUNG = 0x00000010;
    
            public static void DoExitWin(int flg)
            {
                bool ok;
                TokPriv1Luid tp;
                IntPtr hproc = GetCurrentProcess();
                IntPtr htok = IntPtr.Zero;
                ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
                tp.Count = 1;
                tp.Luid = 0;
                tp.Attr = SE_PRIVILEGE_ENABLED;
                ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);
                ok = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
                ok = ExitWindowsEx(flg, 0);
            }
        }
    
    }
    namespace AutoShutDown
    {
        partial class Form1
        {
            /// <summary>
            /// 必需的设计器变量。
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// 清理所有正在使用的资源。
            /// </summary>
            /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Windows 窗体设计器生成的代码
    
            /// <summary>
            /// 设计器支持所需的方法 - 不要
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
            private void InitializeComponent()
            {
                this.components = new System.ComponentModel.Container();
                this.label1 = new System.Windows.Forms.Label();
                this.udTimeout = new System.Windows.Forms.NumericUpDown();
                this.btnStart = new System.Windows.Forms.Button();
                this.btnStop = new System.Windows.Forms.Button();
                this.timer1 = new System.Windows.Forms.Timer(this.components);
                this.label2 = new System.Windows.Forms.Label();
                this.lblInfo = new System.Windows.Forms.Label();
                ((System.ComponentModel.ISupportInitialize)(this.udTimeout)).BeginInit();
                this.SuspendLayout();
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(12, 9);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(65, 12);
                this.label1.TabIndex = 0;
                this.label1.Text = "设定时间:";
                // 
                // udTimeout
                // 
                this.udTimeout.Location = new System.Drawing.Point(83, 7);
                this.udTimeout.Name = "udTimeout";
                this.udTimeout.Size = new System.Drawing.Size(120, 21);
                this.udTimeout.TabIndex = 1;
                this.udTimeout.Value = new decimal(new int[] {
                30,
                0,
                0,
                0});
                // 
                // btnStart
                // 
                this.btnStart.Location = new System.Drawing.Point(246, 6);
                this.btnStart.Name = "btnStart";
                this.btnStart.Size = new System.Drawing.Size(75, 23);
                this.btnStart.TabIndex = 2;
                this.btnStart.Text = "开始";
                this.btnStart.UseVisualStyleBackColor = true;
                this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
                // 
                // btnStop
                // 
                this.btnStop.Location = new System.Drawing.Point(246, 35);
                this.btnStop.Name = "btnStop";
                this.btnStop.Size = new System.Drawing.Size(75, 23);
                this.btnStop.TabIndex = 3;
                this.btnStop.Text = "终止";
                this.btnStop.UseVisualStyleBackColor = true;
                this.btnStop.Click += new System.EventHandler(this.btnStop_Click);
                // 
                // timer1
                // 
                this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
                // 
                // label2
                // 
                this.label2.AutoSize = true;
                this.label2.Location = new System.Drawing.Point(12, 40);
                this.label2.Name = "label2";
                this.label2.Size = new System.Drawing.Size(77, 12);
                this.label2.TabIndex = 4;
                this.label2.Text = "离关机还剩:";
                // 
                // lblInfo
                // 
                this.lblInfo.AutoSize = true;
                this.lblInfo.Location = new System.Drawing.Point(150, 40);
                this.lblInfo.Name = "lblInfo";
                this.lblInfo.Size = new System.Drawing.Size(53, 12);
                this.lblInfo.TabIndex = 5;
                this.lblInfo.Text = "剩余时间";
                // 
                // Form1
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(340, 64);
                this.Controls.Add(this.lblInfo);
                this.Controls.Add(this.label2);
                this.Controls.Add(this.btnStop);
                this.Controls.Add(this.btnStart);
                this.Controls.Add(this.udTimeout);
                this.Controls.Add(this.label1);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
                this.MaximizeBox = false;
                this.Name = "Form1";
                this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
                this.Text = "Form1";
                ((System.ComponentModel.ISupportInitialize)(this.udTimeout)).EndInit();
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            private System.Windows.Forms.Label label1;
            private System.Windows.Forms.NumericUpDown udTimeout;
            private System.Windows.Forms.Button btnStart;
            private System.Windows.Forms.Button btnStop;
            private System.Windows.Forms.Timer timer1;
            private System.Windows.Forms.Label label2;
            private System.Windows.Forms.Label lblInfo;
        }
    }
  • 相关阅读:
    C++ 把输出结果写入文件/从文件中读取数据
    转载:C++之高精度算法
    借助bool判断使冒泡排序效率提高
    启程
    2017总结,2018的路
    mysql 分组排序
    2021年VS2019最新有效的调试ASP.NET Core源码
    神级Java程序员 开车教你基础开发,最简单 微型Java Web框架
    手把手教你 基础 整合最优雅SSM框架:SpringMVC + Spring
    学习Java绝对要懂的,Java编程中最常用的几种排序算法!
  • 原文地址:https://www.cnblogs.com/AndyGe/p/3168821.html
Copyright © 2011-2022 走看看