当前位置:首页> 正文
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#实现关机功能的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持易知道(ezd.cc)。
展开全文阅读
相关内容
-
台式电脑开机一会就自动关机|台式机开一会就自
台式电脑开机一会就自动关机|台式机开一会就自动关机怎么回...
-
电脑关机后显示器灯还亮|电脑关机后显示器灯还
电脑关机后显示器灯还亮|电脑关机后显示器灯还亮着一按键盘...
-
金蝶系统的其他出入库核算|金蝶精斗云的云进销
金蝶系统的其他出入库核算|金蝶精斗云的云进销存软件有其他...
-
iPad的手势功能iPad4手势的使用教程
iPad的手势功能iPad4手势的使用教程,,可能有很多朋友刚刚接触...
-
小米怎么设置呼叫等待|小米怎么设置呼叫等待功
小米怎么设置呼叫等待|小米怎么设置呼叫等待功能,,1. 小米怎么...
-
计算机自动关机的原因是什么
计算机自动关机的原因是什么,,计算机(计算机),通常称为计算机,是一...
-
在电脑主板上的主要芯片功能:妇幼保健|ICH4|FWH|
在电脑主板上的主要芯片功能:妇幼保健|ICH4|FWH|CLK。,,核心提...
-
电脑突然关机cpu红灯|电脑突然关机cpu红灯亮
电脑突然关机cpu红灯|电脑突然关机cpu红灯亮,,电脑突然关机cpu...
-
金立s10快捷键|金立s10功能键设置
金立s10快捷键|金立s10功能键设置,,金立s10功能键设置1、首先...
-
监控外网设置|外网监控的基本功能
监控外网设置|外网监控的基本功能,,1. 外网监控的基本功能首先...
-
三星手机关机连接电脑|三星电脑怎么关机
三星手机关机连接电脑|三星电脑怎么关机,,1. 三星电脑怎么关机...
-
金蝶进销存教程软件|金蝶进销存管理软件最便宜
金蝶进销存教程软件|金蝶进销存管理软件最便宜的多少钱?都是...
-
设置关机快捷键win10|win10怎么关机快捷键
设置关机快捷键win10|win10怎么关机快捷键,,win10怎么关机快捷...
-
成都金蝶进销存软件销售|金蝶软件销售,关于金蝶
成都金蝶进销存软件销售|金蝶软件销售,关于金蝶软件各方面介...
-
vivo网络设置代码|vivo功能代码
vivo网络设置代码|vivo功能代码,,1. vivo功能代码代码是*#558#...