Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

InitiateSystemShutdown (advapi32)
 
.
Summary
Initiate the system shutdown

C# Signature:

[DllImport("advapi32.dll")]
static extern bool InitiateSystemShutdown(
            [MarshalAs(UnmanagedType.LPStr)] string lpMachinename,
            [MarshalAs(UnmanagedType.LPStr)] string lpMessage,
            Int32 dwTimeout,
            bool bForceAppsClosed,
            bool bRebootAfterShutdown);

VB Signature:

Declare Function InitiateSystemShutdown Lib "advapi32.dll" (TODO) As TODO

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Please add some!

C# sample code: sivakumar.keerthi

***

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.Text;

using System.Runtime.InteropServices;

namespace ShutDown

{

    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class FrmMain : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Button CmdExit;
        private System.Windows.Forms.Label LblTimeout;
        private System.Windows.Forms.NumericUpDown NumTimeOut;
        private System.Windows.Forms.CheckBox chkReboot;
        private System.Windows.Forms.Button CmdShutDown;
        [ DllImport( "advapi32.dll" ) ]
        public static extern bool InitiateSystemShutdown( string MachineName , string Message , uint Timeout , bool AppsClosed , bool Restart );
        [ DllImport( "kernel32.dll" ) ]
        public static extern uint GetLastError();
        [ DllImport( "kernel32.dll" ) ]
        public static extern uint FormatMessage( uint Flags , IntPtr Source , uint MessageID , uint LanguageID , StringBuilder Buffer , uint Size , IntPtr Args );
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public FrmMain()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            Image Img = Image.FromFile( Application.StartupPath + "\\" + "ShutDown.gif" );
            CmdShutDown.Image = Img;
            this.ShowInTaskbar = false;
            //
            // 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()
        {
            this.CmdExit = new System.Windows.Forms.Button();
            this.LblTimeout = new System.Windows.Forms.Label();
            this.NumTimeOut = new System.Windows.Forms.NumericUpDown();
            this.chkReboot = new System.Windows.Forms.CheckBox();
            this.CmdShutDown = new System.Windows.Forms.Button();
            ((System.ComponentModel.ISupportInitialize)(this.NumTimeOut)).BeginInit();
            this.SuspendLayout();
            //
            // CmdExit
            //
            this.CmdExit.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.CmdExit.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
            this.CmdExit.ForeColor = System.Drawing.Color.Red;
            this.CmdExit.Location = new System.Drawing.Point(287, 178);
            this.CmdExit.Name = "CmdExit";
            this.CmdExit.TabIndex = 0;
            this.CmdExit.Text = "Exit";
            this.CmdExit.Click += new System.EventHandler(this.CmdExit_Click);
            //
            // LblTimeout
            //
            this.LblTimeout.AutoSize = true;
            this.LblTimeout.BackColor = System.Drawing.Color.Black;
            this.LblTimeout.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.LblTimeout.ForeColor = System.Drawing.Color.White;
            this.LblTimeout.Location = new System.Drawing.Point(6, 180);
            this.LblTimeout.Name = "LblTimeout";
            this.LblTimeout.Size = new System.Drawing.Size(64, 17);
            this.LblTimeout.TabIndex = 1;
            this.LblTimeout.Text = "Time out";
            this.LblTimeout.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            //
            // NumTimeOut
            //
            this.NumTimeOut.Location = new System.Drawing.Point(77, 180);
            this.NumTimeOut.Maximum = new System.Decimal(new int[] {
                                                                       600,
                                                                       0,
                                                                       0,
                                                                       0});
            this.NumTimeOut.Name = "NumTimeOut";
            this.NumTimeOut.Size = new System.Drawing.Size(56, 21);
            this.NumTimeOut.TabIndex = 2;
            //
            // chkReboot
            //
            this.chkReboot.ForeColor = System.Drawing.Color.White;
            this.chkReboot.Location = new System.Drawing.Point(278, 144);
            this.chkReboot.Name = "chkReboot";
            this.chkReboot.Size = new System.Drawing.Size(80, 24);
            this.chkReboot.TabIndex = 3;
            this.chkReboot.Text = "Restart";
            this.chkReboot.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            this.chkReboot.CheckedChanged += new System.EventHandler(this.chkReboot_CheckedChanged);
            //
            // CmdShutDown
            //
            this.CmdShutDown.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.CmdShutDown.ForeColor = System.Drawing.Color.White;
            this.CmdShutDown.Location = new System.Drawing.Point(136, 48);
            this.CmdShutDown.Name = "CmdShutDown";
            this.CmdShutDown.Size = new System.Drawing.Size(100, 80);
            this.CmdShutDown.TabIndex = 4;
            this.CmdShutDown.Text = "ShutDown";
            this.CmdShutDown.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
            this.CmdShutDown.Click += new System.EventHandler(this.CmdShutDown_Click);
            //
            // FrmMain
            //
            this.AutoScaleBaseSize = new System.Drawing.Size(8, 14);
            this.BackColor = System.Drawing.Color.Black;
            this.ClientSize = new System.Drawing.Size(368, 208);
            this.Controls.Add(this.CmdShutDown);
            this.Controls.Add(this.chkReboot);
            this.Controls.Add(this.NumTimeOut);
            this.Controls.Add(this.LblTimeout);
            this.Controls.Add(this.CmdExit);
            this.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Name = "FrmMain";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            ((System.ComponentModel.ISupportInitialize)(this.NumTimeOut)).EndInit();
            this.ResumeLayout(false);

        }
        #endregion

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

        private void CmdExit_Click(object sender, System.EventArgs e)
        {
            Application.Exit();
        }

        private void chkReboot_CheckedChanged(object sender, System.EventArgs e)
        {
            if ( chkReboot.Checked )
                NumTimeOut.Enabled = false;
            else
                NumTimeOut.Enabled = true;
        }

        private void CmdShutDown_Click(object sender, System.EventArgs e)
        {
            try
            {
                string MachineName = Environment.MachineName;
                uint TimeOut = 0;
                string Message = string.Empty;
                if ( chkReboot.Checked )
                    TimeOut = 0;
                else
                {
                    TimeOut = uint.Parse( NumTimeOut.Value.ToString() );
                    Message = "Your system will shutdown in " + TimeOut.ToString() + " seconds";
                }
                bool AppsClosed = false;
                bool Restart = chkReboot.Checked;
                StringBuilder Buffer = new StringBuilder( 512 );
                uint MessageLength = 0;
                GetLastError();
                if ( !InitiateSystemShutdown( MachineName , Message , TimeOut , AppsClosed , Restart ) )
                {
                    MessageLength = FormatMessage( 0x00001000 , IntPtr.Zero , GetLastError() , 0 , Buffer , ( uint )Buffer.Capacity , IntPtr.Zero );
                    if( MessageLength > 0 )
                    {
                        string Error = Buffer.ToString();
                        Error = Error.Substring( 0 , Error.Length - 2 );
                        MessageBox.Show( Error + " (" + GetLastError().ToString() + ")" );
                    }
                }
            }
            catch( Exception ex )
            {
                MessageBox.Show( ex.Message );
            }
        }
    }

}

***

Alternative Managed API:

    Public ErrMsg As String
    Private Flag As Integer = 8

    Function ShutdownPC(ByVal PC_Name As String, ByVal forced As Boolean) As Boolean
    Dim wmi As ManagementClass
    Dim objs As ManagementObjectCollection
    Dim obj As ManagementObject
    Dim Result As Integer

    If forced = True Then
        Flag += 4
    End If
    Try
        wmi = New ManagementClass("\\" & PC_Name & "\root\cimv2:Win32_OperatingSystem")
        objs = wmi.GetInstances()
        For Each obj In objs
        ' Get an input parameters object for this method
        Dim inParams As ManagementBaseObject = obj.GetMethodParameters("Win32Shutdown")
        ' fill 'em in
        inParams("Flags") = Flag
        inParams("Reserved") = 0
        ' do it!
        Dim outParams As ManagementBaseObject = obj.InvokeMethod("Win32Shutdown", inParams, Nothing)
        Result = Convert.ToInt32(outParams("returnValue"))
        If Result <> 0 Then
            ErrMsg = ErrorToString(Result)
            Return False
        End If
        Exit For
        Next
    Catch ex As Exception
        ErrMsg = ex.Message
        Return False
    End Try

    Return True
    End Function

Documentation

Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

 
Access PInvoke.net directly from VS:
Terms of Use
Find References
Show Printable Version
Revisions