Click here to Skip to main content
Click here to Skip to main content

Timer Computer Shutdown

, 2 Oct 2002
Rate this:
Please Sign up or sign in to vote.
This application provides functionality to Shutdown, Restart, Stand By, Hibernate or Log Off supported computers at a selected date and time.

Sample Image - TimerComputerShutdown.jpg

Introduction

Timer Computer Shutdown application provides functionality to shutdown, restart, stand by, hibernate or log off supported computers, at a selected date and time that has yet to elapse. Functionality of the shutdown modes has been provided by a WindowsController.cs class from http://www.mentalis.org/soft/class.qpx?id=7

WARNING: The "Brute" option will force termination of all running processes, any unsaved data will be lost; guaranteeing a shutdown. This option has been designed to close applications which produce a prompt upon closing.

The code

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;

using Org.Mentalis.Utilities;

namespace TimerComputerShutdown
{
    /// <summary>
    /// Summary description for TimerComputerShutdown.
    /// </summary>
    public class TimerComputerShutdown : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Label 
              labelWhatDoYouWantTheComputerToDo;
        private System.Windows.Forms.ComboBox comboBox;
        private System.Windows.Forms.Label 
              labelSelectDateTimeToShutdownComputer;
        private System.Windows.Forms.DateTimePicker 
              dateTimePicker;
        private System.Windows.Forms.Label labelDateTimeNow;
        private System.Windows.Forms.Label 
              labelDateTimeShutdown;
        private System.Windows.Forms.Label labelNow;
        private System.Windows.Forms.Label labelShutdown;
        private System.Windows.Forms.Panel panelParent;
        private System.Windows.Forms.Panel panelChild;
        private System.Windows.Forms.CheckBox checkBox;
        private System.Windows.Forms.Button buttonAbout; 
        private System.Windows.Forms.Button buttonCancel;
        private System.Windows.Forms.Button buttonInvoke;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container 
                               components = null;
        
        private System.Threading.ThreadStart threadStart;
        private System.Threading.Thread thread;

        [DllImport("user32.dll")] private static extern 
            bool SetForegroundWindow(IntPtr hWnd);
        [DllImport("user32.dll")] private static extern 
            bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
        [DllImport("user32.dll")] private static extern 
            bool IsIconic(IntPtr hWnd);

        private const int SW_HIDE = 0;
        private const int SW_SHOWNORMAL = 1;
        private const int SW_SHOWMINIMIZED = 2;
        private const int SW_SHOWMAXIMIZED = 3;
        private const int SW_SHOWNOACTIVATE = 4;
        private const int SW_RESTORE = 9;
        private const int SW_SHOWDEFAULT = 10;
        
        public TimerComputerShutdown()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code 
            // after InitializeComponent call
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null) 
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
                    ...
        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() 
        {
            Application.Run(new TimerComputerShutdown());
        }

        private void TimerComputerShutdown_Load
                 (object sender, System.EventArgs e)
        {
            this.threadStart = new System.Threading.
                             ThreadStart(Application_Tick);
            this.thread = new System.Threading.Thread(threadStart);
            
            this.panelChild.Visible = false;

            this.dateTimePicker.Value = System.DateTime.Now;
        }

        protected override void OnClosing(CancelEventArgs e)
        {
            try
            {
                if (this.thread.IsAlive)
                {
                    this.thread.Abort();
                    this.thread.Join();
                }
            }
            catch (System.Threading.ThreadAbortException 
                                     threadAbortException)
            {
                System.Threading.Thread.ResetAbort();
            }
            catch (System.Exception exception)
            {
                
            }
            finally
            {
                System.Windows.Forms.Application.Exit();
            }

            base.OnClosing(e);
        }

        public void Computer_Shutdown()
        {
            if (this.checkBox.Checked)
            {
                System.Diagnostics.Process[] processes = 
                   System.Diagnostics.Process.GetProcesses();

                foreach (System.Diagnostics.Process 
                           processParent in processes)
                {
                    System.Diagnostics.Process[] processNames = 
                                 System.Diagnostics.Process.
                                 GetProcessesByName
                                 (processParent.ProcessName);
    
                    foreach (System.Diagnostics.Process 
                            processChild in processNames)
                    {
                        try
                        {
                            System.IntPtr hWnd = 
                                   processChild.MainWindowHandle;
                            
                            if (IsIconic(hWnd))
                            {
                                ShowWindowAsync(hWnd, SW_RESTORE);
                            }
                    
                            SetForegroundWindow(hWnd);
                            
                            if (!(processChild.
                               MainWindowTitle.Equals(this.Text)))
                            {
                                processChild.CloseMainWindow();
                                processChild.Kill();
                                processChild.WaitForExit();
                            }
                        }
                        catch (System.Exception exception)
                        {

                        }
                    }
                }
            }

            System.Windows.Forms.Application.Exit();

            switch (this.comboBox.SelectedIndex)
            {
                case 0:
                    Org.Mentalis.Utilities.
                            WindowsController.ExitWindows
                            (RestartOptions.PowerOff, false);
                    break;
                case 1:
                    Org.Mentalis.Utilities.WindowsController.
                         ExitWindows(RestartOptions.Reboot, false);
                    break;
                case 2:
                    Org.Mentalis.Utilities.WindowsController.
                         ExitWindows(RestartOptions.Suspend, false);
                    break;
                case 3:
                    Org.Mentalis.Utilities.WindowsController.
                         ExitWindows(RestartOptions.Hibernate, false);
                    break;
                case 4:
                    Org.Mentalis.Utilities.WindowsController.
                         ExitWindows(RestartOptions.LogOff, false);
                    break;
            }
        }
        
        private void comboBox_SelectedIndexChanged
                 (object sender, System.EventArgs e)
        {
            this.labelSelectDateTimeToShutdownComputer.Text =
                 "Select Date/Time to" + " " + 
                 this.comboBox.SelectedItem.ToString() + 
                 " " + "computer:";
            this.labelDateTimeShutdown.Text = "Date/Time" + 
                 " " + this.comboBox.SelectedItem.ToString() + ":";
        }

        private void checkBox_CheckedChanged(object sender, 
                                        System.EventArgs e)
        {
            if (this.checkBox.Checked)
            {
                Warning warning = new Warning();
                warning.ShowDialog();
            }
        }

        public bool dateTimePicker_Validated()
        {
            if (this.dateTimePicker.Value.
                   CompareTo(System.DateTime.Now) < 0)
            {
                Error error = new Error();
                error.ShowDialog();

                this.dateTimePicker.Value = System.DateTime.Now;

                return false;
            }
            else
            {
                return true;
            }
        }

        private void dateTimePicker_ValueChanged
                 (object sender, System.EventArgs e)
        {
            this.labelShutdown.Text = 
                   this.dateTimePicker.Value.ToString();
        }

        public void Application_Tick()
        {
            while (!(this.labelNow.Text.ToString().
                   Equals(this.dateTimePicker.Value.ToString())))
            {
                this.labelNow.Text = System.DateTime.Now.ToString();
            }

            this.Computer_Shutdown();
        }

        private void buttonAbout_Click(object sender, 
                                    System.EventArgs e)
        {
            About about = new About();

            about.ShowDialog();
        }

        private void buttonCancel_Click(object sender, 
                                      System.EventArgs e)
        {
            try
            {
                if (this.thread.IsAlive)
                {
                    this.thread.Abort();
                    this.thread.Join();
                }
            }
            catch (System.Threading.
                   ThreadStateException threadStateException)
            {
                System.Threading.Thread.ResetAbort();
            }
            catch (System.Exception exception)
            {
                
            }
            finally
            {
                System.Windows.Forms.Application.Exit();
            }
        }
        
        private void buttonInvoke_Click(object sender, 
                                    System.EventArgs e)
        {
            if (this.dateTimePicker_Validated())
            {
                this.thread.Start();

                this.comboBox.Enabled = false;
                this.dateTimePicker.Enabled = false;
                this.panelChild.Visible = true;
                this.buttonInvoke.Enabled = false;
            }
        }
    }
}

That's all!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Steve Puri

United Kingdom United Kingdom
No Biography provided

Comments and Discussions

 
GeneralI Have Problem PinmemberAhmed Hassany10-Dec-08 3:33 
AnswerRe: I Have Problem Pinmembermonstale11-Jan-09 11:19 
QuestionHow can run the C# program whitout .NET Framework [modified] Pinmemberiori10721-Oct-08 9:18 
Questionwindows process(help me!!!)? Pinmemberwita23-Apr-08 16:46 
AnswerRe: windows process(help me!!!)? Pinmembermonstale11-Jan-09 11:24 
QuestionWhat about CPU? Pinmemberhuseyin6-Apr-06 21:53 
AnswerRe: What about CPU? Pinmembermcklain17-Dec-07 4:36 
GeneralRe: What about CPU? PinmemberAlsa7erOnline29-Apr-08 3:31 
GeneralNot real smart Pinmemberstanleystronghold4-Mar-06 3:26 
Generalyou can add this too. ( lock computer) PinmemberSamar Aarkotti14-Nov-05 8:06 
GeneralAnother way to shutdown windows PinsussAlexander Lowe26-Sep-05 11:17 
GeneralRe: Another way to shutdown windows PinmemberAlexander M. Batishchev30-Mar-07 13:04 
Questionshutting down othr systems??? Pinmembersahithya harsha20-Sep-05 1:51 
Generalwin9x Pinmemberpieter@jamwarehouse.com14-Sep-05 9:30 
GeneralTerminate Applicaitons Pinmembertatchung29-Aug-05 22:47 
GeneralSpin Loop in Application_Thick Pinmemberebret20-Aug-05 5:59 
General,Monitor standby or Off PinmemberSean Lamacraft15-Aug-05 22:23 
QuestionDoes it work on Win2k? Pinmemberbigdude12-Jul-05 10:40 
GeneralIt doesn't work when Computer is Locked PinmemberWillStay24-Jan-05 0:10 
GeneralRe: It doesn't work when Computer is Locked Pinmemberpaintmat6-Apr-06 3:49 
GeneralRe: It doesn't work when Computer is Locked PinmemberWillStay6-Apr-06 5:58 
Generalwakeup Pinmemberratho11-Nov-04 7:18 
GeneralRe: wakeup PinsussMemot4-Feb-05 5:44 
GeneralDEVCON or shutdown commands PinsussAnonymous8-Nov-04 7:51 
GeneralBrute shutdown crashes XP?! PinmemberPreky14-Oct-04 23:08 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web02 | 2.8.140709.1 | Last Updated 3 Oct 2002
Article Copyright 2002 by Steve Puri
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid