zoukankan      html  css  js  c++  java
  • 使用c#对windows进行关机、重启或注销

    方法一:调用windows自带的shutdown.exe (缺点:会出现倒计时窗口)

    System.Diagnostics.Process.Start("shutdown.exe", "-r -f -t 15");

    shutdown参数含义:-r关闭并重启动此计算机;-f 强制运行的应用程序关闭而没有警告;-t 15 延时15秒
    shutdown.exe的详细用法:
    shutdown [-i | -l | -s | -r | -a] [-f] [-m //computername] [-t xx] [-c "comment"] [-d up:xx:yy]
    没有参数 显示此消息(与 ? 相同)
    -i 显示 GUI 界面,必须是第一个选项
    -l 注销(不能与选项 -m 一起使用)
    -s 关闭此计算机
    -r 关闭并重启动此计算机
    -a 放弃系统关机
    -m //computername 远程计算机关机/重启动/放弃
    -t xx 设置关闭的超时为 xx 秒
    -c "comment" 关闭注释(最大 127 个字符)
    -f 强制运行的应用程序关闭而没有警告
    -d [u][p]:xx:yy 关闭原因代码
    u 是用户代码
    p 是一个计划的关闭代码
    xx 是一个主要原因代码(小于 256 的正整数)
    yy 是一个次要原因代码(小于 65536 的正整数)

      

    方法二:调用API

     1 private const int SE_PRIVILEGE_ENABLED = 0x00000002;
     2 private const int TOKEN_QUERY = 0x00000008;
     3 private const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
     4 private const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
     5 
     6 [Flags]
     7 public enum ExitWindows : uint
     8 {
     9 LogOff = 0x00, //注销
    10 ShutDown = 0x01, //关机
    11 Reboot = 0x02, //重启
    12 Force = 0x04,
    13 PowerOff = 0x08,
    14 ForceIfHung = 0x10
    15 }
    16 
    17 [Flags]
    18 private enum ShutdownReason : uint
    19 {
    20 MajorApplication = 0x00040000,
    21 MajorHardware = 0x00010000,
    22 MajorLegacyApi = 0x00070000,
    23 MajorOperatingSystem = 0x00020000,
    24 MajorOther = 0x00000000,
    25 MajorPower = 0x00060000,
    26 MajorSoftware = 0x00030000,
    27 MajorSystem = 0x00050000,
    28 MinorBlueScreen = 0x0000000F,
    29 MinorCordUnplugged = 0x0000000b,
    30 MinorDisk = 0x00000007,
    31 MinorEnvironment = 0x0000000c,
    32 MinorHardwareDriver = 0x0000000d,
    33 MinorHotfix = 0x00000011,
    34 MinorHung = 0x00000005,
    35 MinorInstallation = 0x00000002,
    36 MinorMaintenance = 0x00000001,
    37 MinorMMC = 0x00000019,
    38 MinorNetworkConnectivity = 0x00000014,
    39 MinorNetworkCard = 0x00000009,
    40 MinorOther = 0x00000000,
    41 MinorOtherDriver = 0x0000000e,
    42 MinorPowerSupply = 0x0000000a,
    43 MinorProcessor = 0x00000008,
    44 MinorReconfig = 0x00000004,
    45 MinorSecurity = 0x00000013,
    46 MinorSecurityFix = 0x00000012,
    47 MinorSecurityFixUninstall = 0x00000018,
    48 MinorServicePack = 0x00000010,
    49 MinorServicePackUninstall = 0x00000016,
    50 MinorTermSrv = 0x00000020,
    51 MinorUnstable = 0x00000006,
    52 MinorUpgrade = 0x00000003,
    53 MinorWMI = 0x00000015,
    54 FlagUserDefined = 0x40000000,
    55 FlagPlanned = 0x80000000
    56 }
    57 
    58 [StructLayout(LayoutKind.Sequential, Pack = 1)]
    59 private struct TokPriv1Luid 
    60 { 
    61 public int Count;
    62 public long Luid;
    63 public int Attr;
    64 }
    65 
    66 [DllImport("kernel32.dll", ExactSpelling = true)]
    67 private static extern IntPtr GetCurrentProcess();
    68 
    69 [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
    70 private static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
    71 
    72 [DllImport("advapi32.dll", SetLastError = true)]
    73 private static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
    74 
    75 [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
    76 private static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall, ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);
    77 
    78 [DllImport("user32.dll")]
    79 private static extern bool ExitWindowsEx(ExitWindows uFlags, ShutdownReason dwReason);
    80 
    81 /// <summary>
    82 /// 关机、重启、注销windows
    83 /// </summary>
    84 /// <param name="flag"></param>
    85 public static void DoExitWindows(ExitWindows flag)
    86 {
    87 TokPriv1Luid tp;
    88 IntPtr hproc = GetCurrentProcess(); 
    89 IntPtr htok = IntPtr.Zero; 
    90 OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok); 
    91 tp.Count = 1; 
    92 tp.Luid = 0; 
    93 tp.Attr = SE_PRIVILEGE_ENABLED; 
    94 LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid); 
    95 AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
    96 ExitWindowsEx(flag, ShutdownReason.MajorOther);
    97 }

    http://www.cnblogs.com/sosoft/p/3459826.html

  • 相关阅读:
    ios中地图
    ios中地图定位
    ios中文件下载(带缓存)
    ios中tableview网封装(viewcontroller封装)常用的
    ipad开发小结
    ios tableview分组
    los中预览文件
    ios中一级导航
    ios中封装九宫格的使用(二级导航)
    ios中自定义button
  • 原文地址:https://www.cnblogs.com/sosoft/p/3459826.html
Copyright © 2011-2022 走看看