我用using System.Runtime.InteropServices ; 
using System.Text ;
[ DllImport("user32") ] 
public static extern long ExitWindowsEx(long uFlags, long dwReserved ) ;
ExitWindowsEx(1, 0);
怎么没有反应
用ExitWindowsEx(0, 0);是注销

解决方案 »

  1.   

    楼主可以试试在c#里面执行cmd命令
    命令为shutdown -s
    偶没试过哈
    只知道C#可以跑cmd命令
      

  2.   

    C#调用API关机:namespace ShutDownTest { 
    using System;  using System.Drawing;  using System.Collections;  using System.ComponentModel;  using System.Windows.Forms;  using System.Data;  using System.Runtime.InteropServices;  using System.Security.Principal; 
    [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)] public struct LUID {   public uint LowPart;   public uint HighPart; }; 
    [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)] public struct TOKEN_PRIVILEGES {   public uint PrivilegeCount;   public LUID Luid;   public uint Attributes; }; 
    public class PlatformImport  {    [DllImport("advapi32", CharSet=CharSet.Auto)]   public static extern bool LookupPrivilegevalue (string sysname,string privname,ref LUID luid); 
      [DllImport("advapi32", CharSet=CharSet.Auto)]   public static extern bool AdjustTokenPrivileges(IntPtr handle, bool dsall,ref TOKEN_PRIVILEGES newstate,int len, IntPtr oldstate,IntPtr retlen); 
      [DllImport("kernel32.dll")]    public static extern int GetLastError();       [DllImport("user32.dll")]    public static extern bool ExitWindowsEx(int uFlags, int dwReason);  }  
    public class Form1 : Form  {    private Button button1;  
      public Form1()    {  
       this.button1 = new System.Windows.Forms.Button();     this.SuspendLayout();  
       this.button1.Location = new Point(136, 112);     this.button1.Name = "button1";     this.button1.Size = new Size(80, 24);     this.button1.TabIndex = 0;     this.button1.Text = "Shut Down";     this.button1.Click += new EventHandler(this.button1_Click);  
       this.AutoScaleBaseSize = new Size(6, 14);     this.ClientSize = new Size(292, 273);     this.Controls.Add(button1);     this.Name = "Form1";     this.Text = "shutdown test";     this.ResumeLayout(false);    }  
      [STAThread]    static void Main()    {     Application.Run(new Form1());    }  
      private void button1_Click(object sender, System.EventArgs e)    {     WindowsIdentity identity = WindowsIdentity.GetCurrent();    IntPtr token = identity.Token;    IntPtr luid = (IntPtr)0;    IntPtr previousState = (IntPtr)0;    IntPtr previousStateLength = (IntPtr)0;    LUID privilegeId = new LUID ();    PlatformImport.LookupPrivilegevalue ("", "SeShutdownPrivilege", ref privilegeId);     
       TOKEN_PRIVILEGES privileges = new TOKEN_PRIVILEGES();    privileges.PrivilegeCount = 1;    privileges.Luid = privilegeId;    privileges.Attributes = 2;    PlatformImport.AdjustTokenPrivileges (token, false, ref privileges, Marshal.SizeOf(privileges), previousState, previousStateLength); 
       if (PlatformImport.GetLastError() != 0) return;  
       if(!(PlatformImport.ExitWindowsEx(0x01 | 0x04, 0))) return;   } }  }
      

  3.   

    在2000以后你要获取SeShutdownPrivilege权限