zoukankan      html  css  js  c++  java
  • API实现的 重启、关机、注销 .net类

    namespace System {
    /*
    参考://https://www.cnblogs.com/banhua/archive/2012/07/13/2590920.html

    */
        using System.Collections.Generic;
        using System.Text;
        using System.Runtime.InteropServices;
    
        class SystemUtil {
            [StructLayout(LayoutKind.Sequential,Pack = 1)]
            struct TokPriv1Luid {
                public int Count;
                public long Luid;
                public int Attr;
            }
    
            [DllImport("kernel32.dll",ExactSpelling = true)]
            static extern IntPtr GetCurrentProcess();
    
            [DllImport("advapi32.dll",ExactSpelling = true,SetLastError = true)]
            static extern bool OpenProcessToken(IntPtr h,int acc,ref IntPtr phtok);
    
            [DllImport("advapi32.dll",SetLastError = true)]
            static extern bool LookupPrivilegeValue(string host,string name,ref long pluid);
    
            [DllImport("advapi32.dll",ExactSpelling = true,SetLastError = true)]
            static extern bool AdjustTokenPrivileges(IntPtr htok,bool disall,ref TokPriv1Luid newst,int len,IntPtr prev,IntPtr relen);
    
            [DllImport("user32.dll",ExactSpelling = true,SetLastError = true)]
            static extern bool ExitWindowsEx(int flg,int rea);
    
            const int SE_PRIVILEGE_ENABLED = 0x00000002;
            const int TOKEN_QUERY = 0x00000008;
            const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
            const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
            const int EWX_LOGOFF = 0x00000000;
            const int EWX_SHUTDOWN = 0x00000001;
            const int EWX_REBOOT = 0x00000002;
            const int EWX_FORCE = 0x00000004;
            const int EWX_POWEROFF = 0x00000008;
            const int EWX_FORCEIFHUNG = 0x00000010;
    
            private static void DoExitWin(int flg) {
                bool b;
                TokPriv1Luid tp;
                IntPtr hproc = GetCurrentProcess();
                IntPtr htok = IntPtr.Zero;
                b = OpenProcessToken(hproc,TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,ref htok);
                tp.Count = 1;
                tp.Luid = 0;
                tp.Attr = SE_PRIVILEGE_ENABLED;
                b = LookupPrivilegeValue(null,SE_SHUTDOWN_NAME,ref tp.Luid);
                b = AdjustTokenPrivileges(htok,false,ref tp,0,IntPtr.Zero,IntPtr.Zero);
                b = ExitWindowsEx(flg,0);
            }
    
            public static void Reboot() {
                DoExitWin(EWX_FORCE | EWX_REBOOT); //重启
            }
    
            public static void PowerOff() {
                DoExitWin(EWX_FORCE | EWX_POWEROFF);    //关机
            }
    
            public static void LogoOff() {
                DoExitWin(EWX_FORCE | EWX_LOGOFF);      //注销
            }
    
        }
    
    }
    
  • 相关阅读:
    python3 bytes数据类型探讨
    字典
    列表及元组
    在py文件中设置文件头
    函数的作用域、global与nonlocal
    python中 的意义及用法
    int、bool和str
    while循环、格式化输出、运算符和编码初识
    python初认识、基础数据类型以及 if 流程控制
    列表遍历和生成器遍历效率对比
  • 原文地址:https://www.cnblogs.com/xe2011/p/12896563.html
Copyright © 2011-2022 走看看