Type a page name and press Enter. You'll jump to the page if it exists, or you can create it if it doesn't.
To create a page in a module other than advapi32, prefix the name with the module name and a period.
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
TODO - a short description
12/14/2007 1:24:08 AM - anonymous
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).