zoukankan      html  css  js  c++  java
  • 关闭和注销WINDOWS

    提供两种方法,第一种可以通过调用API函数实现关机功能,第二种可以使用我前几篇提到的调用CMD执行代码的功能通过shutdown命令关机

    代码如下:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;

    namespace ZHWTools
    {
        
    class CloseWin
        
    {
            [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 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, falseref   tp, 0, IntPtr.Zero, IntPtr.Zero);
                ok 
    = ExitWindowsEx(flg, 0);
            }


            
    public static void closeWindow()
            
    {
                CloseWin cw 
    = new CloseWin();
                cw.DoExitWin(EWX_POWEROFF);
            }


        }

    }



    使用时只要用ZHWTools.CloseWin.closeWindow();

  • 相关阅读:
    Yii2中如何使用CodeCeption
    切换composer国内镜像 Laravel China停用,切换阿里云composer全量镜像
    mysql 不同库不同表字段数据复制
    DataGridView绑定数据库,取得的数据插入到DataGridView指定列(一)
    Winform在一个窗体获取其他窗体的值
    winform按钮和子按钮
    C#生成唯一的ID保存到数据库
    C#Winform从页面获取数据,传入数据库
    C#winform省市县联动,以及有的县是空值时显示异常的处理
    VS2010连接SQLite数据库
  • 原文地址:https://www.cnblogs.com/top5/p/1723513.html
Copyright © 2011-2022 走看看