我整理的关机类

  1. using System;
  2. using System.Runtime.InteropServices  ;
  3. namespace System.Shangfei.Window
  4. {
  5.     namespace exitwindow
  6.     {
  7.         /// <summary>
  8.         /// ExitWin 的摘要说明。
  9.         /// </summary>
  10.         public class ExitWin
  11.         {
  12.             public ExitWin(string RegClient)
  13.             {
  14.             }
  15.             [StructLayout(LayoutKind.Sequential, Pack=1)] 
  16.                 internal struct TokPriv1Luid 
  17.             { 
  18.                 public int Count; 
  19.                 public long Luid; 
  20.                 public int Attr; 
  21.             } 
  22.             [DllImport("kernel32.dll", ExactSpelling=true) ] 
  23.             internal static extern IntPtr GetCurrentProcess(); 
  24.             [DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true) ] 
  25.             internal static extern bool OpenProcessToken( IntPtr h, int acc, ref IntPtr phtok ); 
  26.             [DllImport("advapi32.dll", SetLastError=true) ] 
  27.             internal static extern bool LookupPrivilegeValue( string host, string name, ref long pluid ); 
  28.             [DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true) ] 
  29.             internal static extern bool AdjustTokenPrivileges( IntPtr htok, bool disall, 
  30.                 ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen ); 
  31.             [DllImport("user32.dll", ExactSpelling=true, SetLastError=true) ] 
  32.             internal static extern bool ExitWindowsEx( int flg, int rea ); 
  33.             internal const int SE_PRIVILEGE_ENABLED = 0x00000002; 
  34.             internal const int TOKEN_QUERY = 0x00000008; 
  35.             internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020; 
  36.             internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
  37.             internal const int EWX_LOGOFF = 0x00000000; 
  38.             internal const int EWX_SHUTDOWN = 0x00000001; 
  39.             internal const int EWX_REBOOT = 0x00000002; 
  40.             internal const int EWX_FORCE = 0x00000004; 
  41.             internal const int EWX_POWEROFF = 0x00000008; 
  42.             internal const int EWX_FORCEIFHUNG = 0x00000010;
  43.             private static void DoExitWin(int flg)
  44.             {
  45.                 bool ok;
  46.                 try
  47.                 {
  48.                     TokPriv1Luid tp;
  49.                     IntPtr hproc = GetCurrentProcess();
  50.                     IntPtr htok = IntPtr.Zero;
  51.                     ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
  52.                     tp.Count = 1;
  53.                     tp.Luid = 0;
  54.                     tp.Attr = SE_PRIVILEGE_ENABLED;
  55.                     ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);
  56.                     ok = AdjustTokenPrivileges(htok, falseref tp, 0, IntPtr.Zero, IntPtr.Zero);
  57.                     ok = ExitWindowsEx(flg, 0);
  58.                 }
  59.                 catch
  60.                 {
  61.                 }
  62.             }
  63.             public static void Shotdown()
  64.             {
  65.                 DoExitWin( EWX_SHUTDOWN+EWX_FORCEIFHUNG+EWX_POWEROFF ); 
  66.             }
  67.             public static void ShotdownForce()
  68.             {
  69.                 DoExitWin( EWX_SHUTDOWN+EWX_FORCE +EWX_POWEROFF); 
  70.             }
  71.             public static void Reboot() 
  72.             { 
  73.                 DoExitWin( EWX_REBOOT ); 
  74.             } 
  75.         }
  76.     }
  77. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值