这篇文章介绍了C#实现关机功能的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
在网上找的一个在C#中实现关机的类,非常简单,就是一个winapi的封装。在这里记录一下,以备不时之需。
public static class Shutdown
{
    [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 DoFlag, 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 DoFlag)
    {
        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(DoFlag, 0);
    }
    public static void Reboot()
    {
        DoExitWin(EWX_FORCE | EWX_REBOOT);
    }
    public static void PowerOff()
    {
        DoExitWin(EWX_FORCE | EWX_POWEROFF);
    }
    public static void LogOff()
    {
        DoExitWin(EWX_FORCE | EWX_LOGOFF);
    }
}到此这篇关于C#实现关机功能的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持得得之家。
				 沃梦达教程
				
			本文标题为:C#实现关机功能
				
        
 
            
        
             猜你喜欢
        
	     - Unity Shader实现模糊效果 2023-04-27
 - Oracle中for循环的使用方法 2023-07-04
 - 如何使用C# 捕获进程输出 2023-03-10
 - 在C# 8中如何使用默认接口方法详解 2023-03-29
 - C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
 - .NET CORE DI 依赖注入 2023-09-27
 - Unity3D实现渐变颜色效果 2023-01-16
 - c# 模拟线性回归的示例 2023-03-14
 - WPF使用DrawingContext实现绘制刻度条 2023-07-04
 - user32.dll 函数说明小结 2022-12-26
 
						
						
						
						
						
				
				
				
				