求关机、重启、注销代码
如题
------解决方案--------------------重启使用WMI,网上代码很多。 
 估计注销也可以使用WMI。 
 关机使用调用API的类如下: 
 using System; 
 using System.Runtime.InteropServices ;   
 namespace OffComputer 
 { 
     ///  <summary>  
     /// Offcomputer 的摘要说明。 
     /// 关闭计算机 
     ///  </summary>  
     public class Offcomputer 
     { 
         [StructLayout(LayoutKind.Sequential, Pack = 1)] 
         internal struct TokPriv1Luid 
         { 
             public int Count; 
             public long Luid; 
             public int Attr; 
         }   
         [DllImport( "kernel32.dll ", ExactSpelling = true)] 
         internal static extern IntPtr GetCurrentProcess();   
         [DllImport( "advapi32.dll ", ExactSpelling = true, SetLastError = true)] 
         internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);   
         [DllImport( "advapi32.dll ", SetLastError = true)] 
         internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);   
         [DllImport( "advapi32.dll ", ExactSpelling = true, SetLastError = true)] 
         internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall, 
         ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);   
         [DllImport( "user32.dll ", ExactSpelling = true, SetLastError = true)] 
         internal static extern bool ExitWindowsEx(int flg, int rea);   
         internal const int SE_PRIVILEGE_ENABLED = 0x00000002; 
         internal const int TOKEN_QUERY = 0x00000008; 
         internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020; 
         internal const string SE_SHUTDOWN_NAME =  "SeShutdownPrivilege "; 
         internal const int EWX_LOGOFF = 0x00000000; 
         internal const int EWX_SHUTDOWN = 0x00000001; 
         internal const int EWX_REBOOT = 0x00000002; 
         internal const int EWX_FORCE = 0x00000004; 
         internal const int EWX_POWEROFF = 0x00000008; 
         internal const int EWX_FORCEIFHUNG = 0x00000010; 
         public Offcomputer() 
         { 
             // 
             // TODO: 在此处添加构造函数逻辑 
             // 
         } 
         public static void ShutDown(int i)    //i=0 ShutDown  i=1 Reboot 
         { 
             if (i == 0) 
             { 
                 DoExitWin(EWX_SHUTDOWN + EWX_FORCE); 
             } 
             else if (i == 1) 
             { 
                 DoExitWin(EWX_REBOOT + EWX_FORCE); 
             }   
         } 
         private static void DoExitWin(int flg) 
         { 
             bool ok; 
             TokPriv1Luid tp; 
             IntPtr hproc = GetCurrentProcess(); 
             IntPtr htok = IntPtr.Zero; 
             ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok); 
             tp.Count = 1; 
             tp.Luid = 0; 
             tp.Attr = SE_PRIVILEGE_ENABLED; 
             ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid); 
             ok = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero); 
             ok = ExitWindowsEx(flg, 0); 
         }   
     } 
 }   
------解决方案--------------------// AutoShutDownDlg.cpp : 实现文件 
 //   
 #include  "stdafx.h " 
 #include  "AutoShutDown.h " 
 #include  "AutoShutDownDlg.h "   
 #ifdef _DEBUG 
 #define new DEBUG_NEW 
 #endif   
 #define WM_TRAYMESSAGE WM_USER+10000;     
 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框