求关机、重启、注销代码

来源:互联网 发布:淘宝上能搜到闲鱼 编辑:程序博客网 时间:2024/05/16 08:22
重启使用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);                 }         } }
原创粉丝点击