C# 快速关机代码
来源:互联网 发布:淘宝网手机库计算比例 编辑:程序博客网 时间:2024/05/22 11:24
今天用到这个,网上找个不错的,保存下来。
注意:这个方法是快速关机,不会保存你的任何未保存信息。
- // 这个结构体将会传递给API。使用StructLayout
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- internal struct TokPriv1Luid
- {
- public int Count;
- public long Luid;
- public int Attr;
- }
- // 导入的方法必须是static extern的,并且没有方法体。调用这些方法就相当于调用Windows API。
- [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);
- // 以下定义了在调用WinAPI时需要的常数。这些常数通常可以从Platform SDK的包含文件(头文件)中找到
- 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_SHUTDOWN = 0x00000001;
- //internal const int EWX_LOGOFF = 0x00000000;
- //internal const int EWX_REBOOT = 0x00000002;
- //internal const int EWX_FORCE = 0x00000004;
- //internal const int EWX_POWEROFF = 0x00000008;
- //internal const int EWX_FORCEIFHUNG = 0x00000010;
- // 通过调用WinAPI实现关机,主要代码再最后一行ExitWindowsEx,这调用了同名的WinAPI,正好是关机用的。
- 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);
- }
- /// <summary>
- /// 关机按钮
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void btnShutDown_Click(object sender, EventArgs e)
- {
- DialogResult dr = MessageBox.Show(@"确定要关机吗?请保存信息后按'是',不关机按'否'", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
- if (dr == DialogResult.Yes)
- {
- CommonClass.DoExitWin(CommonClass.EWX_SHUTDOWN);
- }
- }
转载自:http://hi.baidu.com/youzhch/blog/item/215a1e4a5ee56f2009f7efd9.html
- C# 快速关机代码
- C# 快速关机代码
- 快速关机代码
- c# 关机 代码
- C#远程关机代码
- c#实现winform关机代码
- C#写的Win2000关机代码
- 快速关机
- C#关机
- c#关机
- 关机代码
- 关机代码
- 关机代码
- 关机代码
- C# 中使得windows 2000/XP关机代码
- 经调试通过的C# Win200关机代码
- 快速排序--C#代码篇
- C#代码实现 快速排序
- uchome二次开发必须知道的通用方法
- centos5,安装cacti
- 【软件测试自动化-QTP系列讲座 32】== 对象封装属性的真正源头 ==
- 第1二分查找
- 用 c.vim插件打造C/C++集成编辑器
- C# 快速关机代码
- snmp 客户端配置
- 以后不再忘记修改运行时库模式
- NetAdvantage For .NET常见技术问题集锦(三)
- uchome中ajaxmenu弹出框的使用
- DataTable状态(DataRowState, AcceptChanges,RejectChanges,BeginEdit)介绍
- Jade to health
- 用代码实现页面Action跳转
- Locked Out from Magento admin?