Click here to Skip to main content
6,634,665 members and growing! (16,916 online)
Email Password   helpLost your password?
Languages » C# » Applications     Intermediate

Timer Computer Shutdown

By Steve Puri

This application provides functionality to Shutdown, Restart, Stand By, Hibernate or Log Off supported computers at a selected date and time.
C#.NET 1.0, Win2K, WinXP, Dev
Posted:28 Sep 2002
Updated:2 Oct 2002
Views:237,929
Bookmarked:88 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
18 votes for this article.
Popularity: 4.82 Rating: 3.84 out of 5

1

2
3 votes, 21.4%
3
5 votes, 35.7%
4
6 votes, 42.9%
5

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


Member

Location: United Kingdom United Kingdom

Other popular C# articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 40 (Total in Forum: 40) (Refresh)FirstPrevNext
GeneralI Have Problem PinmemberAhmed Hassany4:33 10 Dec '08  
AnswerRe: I Have Problem Pinmembermonstale12:19 11 Jan '09  
GeneralHow can run the C# program whitout .NET Framework [modified] Pinmemberiori10710:18 21 Oct '08  
Questionwindows process(help me!!!)? Pinmemberwita17:46 23 Apr '08  
AnswerRe: windows process(help me!!!)? Pinmembermonstale12:24 11 Jan '09  
GeneralWhat about CPU? Pinmemberhuseyin22:53 6 Apr '06  
GeneralRe: What about CPU? Pinmembermcklain5:36 17 Dec '07  
GeneralRe: What about CPU? PinmemberAlsa7erOnline4:31 29 Apr '08  
GeneralNot real smart Pinmemberstanleystronghold4:26 4 Mar '06  
Generalyou can add this too. ( lock computer) PinmemberSamar Aarkotti9:06 14 Nov '05  
GeneralAnother way to shutdown windows PinsussAlexander Lowe12:17 26 Sep '05  
GeneralRe: Another way to shutdown windows PinmemberAlexander M. Batishchev14:04 30 Mar '07  
Generalshutting down othr systems??? Pinmembersahithya harsha2:51 20 Sep '05  
Generalwin9x Pinmemberpieter@jamwarehouse.com10:30 14 Sep '05  
GeneralTerminate Applicaitons Pinmembertatchung23:47 29 Aug '05  
GeneralSpin Loop in Application_Thick Pinmemberebret6:59 20 Aug '05  
General,Monitor standby or Off PinmemberSean Lamacraft23:23 15 Aug '05  
GeneralDoes it work on Win2k? Pinmemberbigdude11:40 12 Jul '05  
GeneralIt doesn't work when Computer is Locked PinmemberWillStay1:10 24 Jan '05  
GeneralRe: It doesn't work when Computer is Locked Pinmemberpaintmat4:49 6 Apr '06  
GeneralRe: It doesn't work when Computer is Locked PinmemberWillStay6:58 6 Apr '06  
Generalwakeup Pinmemberratho8:18 11 Nov '04  
GeneralRe: wakeup PinsussMemot6:44 4 Feb '05  
GeneralDEVCON or shutdown commands PinsussAnonymous8:51 8 Nov '04  
GeneralBrute shutdown crashes XP?! PinmemberPreky0:08 15 Oct '04  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 2 Oct 2002
Editor: Smitha Vijayan
Copyright 2002 by Steve Puri
Everything else Copyright © CodeProject, 1999-2009
Web19 | Advertise on the Code Project