zoukankan      html  css  js  c++  java
  • C#代码关闭Windows XP

    <!--StartFragment-->using System;
    using System.Runtime.InteropServices;
      
    class shoutdown{
       [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;

       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 );
       }

          public static void Main()
          {
             Console.WriteLine("正在关闭计算机……");
             // 修改 EWX_SHUTDOWN 或者 EWX_LOGOFF, EWX_REBOOT等实现不同得功能。
             // 在XP下可以看到帮助信息,以得到不同得参数
             // SHUTDOWN /?
             DoExitWin(EWX_SHUTDOWN);
          }
    }

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mane_yao/archive/2010/04/23/5519738.aspx

  • 相关阅读:
    PAT B1027 打印沙漏 (20 分)
    PAT B1025 反转链表 (25 分)
    PAT B1022 D进制的A+B (20 分)
    PAT B1018 锤子剪刀布 (20 分)
    PAT B1017 A除以B (20 分)
    PAT B1015 德才论 (25 分)
    PAT B1013 数素数 (20 分)
    PAT B1010 一元多项式求导 (25 分)
    HDU 1405 The Last Practice
    HDU 1165 Eddy's research II
  • 原文地址:https://www.cnblogs.com/mane/p/1829977.html
Copyright © 2011-2022 走看看