[DllImport("advapi32.dll")]
static extern bool InitiateSystemShutdown(
[MarshalAs(UnmanagedType.LPStr)] string lpMachinename,
[MarshalAs(UnmanagedType.LPStr)] string lpMessage,
Int32 dwTimeout,
bool bForceAppsClosed,
bool bRebootAfterShutdown);
Declare Function InitiateSystemShutdown Lib "advapi32.dll" (TODO) As TODO
None.
None.
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 );
}
}
}
}
***
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