zoukankan      html  css  js  c++  java
  • C#实现注销、重启和关机代码

    首先要导入对命名空间

    using System.Runtime.InteropServices;

    的引用

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

            }

            private void button2_Click(object sender, EventArgs e)

            {

                //此代码实现重启功能

                DoExitWin(EWX_REBOOT);

            }

            private void button3_Click(object sender, EventArgs e)

            {

                 //此代码实现注销功能

                DoExitWin(EWX_LOGOFF);

            }

            private void button1_Click_1(object sender, EventArgs e)

            {

                 //此代码实现关机功能

                DoExitWin(EWX_SHUTDOWN);

            }

     文章转自:http://essay.iteye.com/blog/342173

     
  • 相关阅读:
    Spring AOP + Redis 实现针对用户的接口访问频率限制
    Flutter 圆形透明 Loading 弹窗
    VUE 自定义组件的双向数据绑定 和替代钩子
    10个前端技巧
    前端中的数据库
    cors 跨域问题
    promise解决回调地狱问题
    VUE框架JS组件的封装 --Vue.extend
    HBuilderX 用夜神模拟器运行vue项目
    vue关于axios 拦截器的使用
  • 原文地址:https://www.cnblogs.com/swxj/p/2957080.html
Copyright © 2011-2022 走看看