1. using System.Runtime.InteropServices;
  2. namespace HookDemo
  3. {
  4. class WindowsExit
  5. {
  6. [StructLayout(LayoutKind.Sequential, Pack = 1)]
  7. private struct TokPriv1Luid
  8. {
  9. public int Count;
  10. public long Luid;
  11. public int Attr;
  12. }
  13. [DllImport("kernel32.dll", ExactSpelling = true)]
  14. private static extern IntPtr GetCurrentProcess();
  15. [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
  16. private static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
  17. [DllImport("advapi32.dll", SetLastError = true)]
  18. private static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
  19. [DllImport("advapi32.dll", ExactSpelling = true, SetLastError = true)]
  20. private static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,
  21. ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen);
  22. [DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
  23. private static extern bool ExitWindowsEx(int DoFlag, int rea);
  24. [DllImport("user32.dll")]
  25. public static extern void LockWorkStation();
  26. private const int SE_PRIVILEGE_ENABLED = 0x00000002;
  27. private const int TOKEN_QUERY = 0x00000008;
  28. private const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
  29. private const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
  30. private const int EWX_LOGOFF = 0x00000000;
  31. private const int EWX_SHUTDOWN = 0x00000001;
  32. private const int EWX_REBOOT = 0x00000002;
  33. private const int EWX_FORCE = 0x00000004;
  34. private const int EWX_POWEROFF = 0x00000008;
  35. private const int EWX_FORCEIFHUNG = 0x00000010;
  36. private static bool DoExitWin(int DoFlag)
  37. {
  38. bool ok;
  39. TokPriv1Luid tp;
  40. IntPtr hproc = GetCurrentProcess();
  41. IntPtr htok = IntPtr.Zero;
  42. ok = OpenProcessToken(hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok);
  43. tp.Count = 1;
  44. tp.Luid = 0;
  45. tp.Attr = SE_PRIVILEGE_ENABLED;
  46. ok = LookupPrivilegeValue(null, SE_SHUTDOWN_NAME, ref tp.Luid);
  47. ok = AdjustTokenPrivileges(htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero);
  48. ok = ExitWindowsEx(DoFlag, 0);
  49. return ok;
  50. }
  51. /// <summary>
  52. /// 锁定计算机
  53. /// </summary>
  54. public static void Lock()
  55. {
  56. LockWorkStation();
  57. }
  58. /**/
  59. /// <summary>
  60. /// 重新启动
  61. /// </summary>
  62. public static bool Reboot()
  63. {
  64. return DoExitWin(EWX_FORCE | EWX_REBOOT);
  65. }
  66. /**/
  67. /// <summary>
  68. /// 关机
  69. /// </summary>
  70. public static bool PowerOff()
  71. {
  72. return DoExitWin(EWX_FORCE | EWX_POWEROFF);
  73. }
  74. /**/
  75. /// <summary>
  76. /// 注销
  77. /// </summary>
  78. public static bool LogOff()
  79. {
  80. return DoExitWin(EWX_FORCE | EWX_LOGOFF);
  81. }
  82. }
  83. }

整理出来的一个windows关机、锁定、重启、注销 API调用的更多相关文章

  1. 编程实现Windows关机、重启、注销

    要想编程使Windows关机.重启或者注销,可以使用ExWindowsEx这个API函数,该函数只有两个参数,第一个表示关机动作的标志,也就是你要让该函数关机呢,还是重启,还是注销等.可以使用EWX_ ...

  2. Android系统关机或重启的几种实现方式

    前阵子工作上遇到一些关于Android系统关机或重启的系统修改,于是,做了一些尝试,也搜集了一下资料,现在整理一下,做一些总结,方便学习或者日后工作的需要. 默认的SDK并没有提供应用开发者直接的An ...

  3. 手机控制电脑定时关机,重启WiFi

    需求 晚上上床,电脑开着WiFi让手机上网.要么上床之前就给电脑设置定时关机:要么就电脑开通宵:要么就待会下来关电脑.这3种情况都非常不好,要么麻烦,要么浪费. 最无奈的是电脑刚开好WiFi,上床后才 ...

  4. 用 C# 代码如何实现让你的电脑关机,重启,注销,锁定,休眠,睡眠

    简介 本文讲述了用 C# 代码如何实现让你的电脑关机,重启,注销,锁定,休眠,睡眠. 如何实现 首先,使用 using 语句添加我们需要的命名空间: using System.Diagnostics; ...

  5. 使用c#对windows进行关机、重启或注销

    方法一:调用windows自带的shutdown.exe (缺点:会出现倒计时窗口) System.Diagnostics.Process.Start("shutdown.exe" ...

  6. C#实现控制Windows系统关机、重启和注销的方法:

    shutdown命令的参数: shutdown.exe -s:关机shutdown.exe -r:关机并重启shutdown.exe -l:注销当前用户 shutdown.exe -s -t 时间:设 ...

  7. C/C++控制Windows关机/注销/重启的正确姿势

    简介 说到代码控制Windows关机/注销/重启的方式,有很多种,最简单的不过就是控制命令行,使用system("pause")函数执行一个shutdown -s -t 0,关机就 ...

  8. C#实现控制Windows系统关机、重启和注销的方法

    shutdown命令的参数: shutdown.exe -s:关机shutdown.exe -r:关机并重启shutdown.exe -l:注销当前用户 shutdown.exe -s -t 时间:设 ...

  9. wpf实现一个windows定时关机的工具

    基本界面 起源 在家睡前喜欢用电脑放情景喜剧看,电脑需要定时关机,一开始直接命令行定时关机,感觉有点小麻烦, 于是最近弄了个有界面的 主要功能 在指定的时间之后执行 关机|休眠|重启 的操作, 支持取 ...

随机推荐

  1. Mongodb亿级数据量的性能测试

    进行了一下Mongodb亿级数据量的性能测试,分别测试如下几个项目:   (所有插入都是单线程进行,所有读取都是多线程进行) 1) 普通插入性能 (插入的数据每条大约在1KB左右) 2) 批量插入性能 ...

  2. 多通道(比方RGB三通道)卷积过程

    今天一个同学问 卷积过程好像是对 一个通道的图像进行卷积, 比方10个卷积核,得到10个feature map, 那么输入图像为RGB三个通道呢,输出就为 30个feature map 吗, 答案肯定 ...

  3. Project Euler:Problem 41 Pandigital prime

    We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly o ...

  4. EasyPlayerPro Windows播放器读取xml配置文件中的特殊字符问题

    问题被反馈 今日一客户反馈说播放不了带用户名密码的流, 奇怪,这个问题不存在啊-,按照客户的说法, 是将url地址保存在配置文件中,然后再打开EasyPlayerPro运行: 问题复现 在EasyPl ...

  5. 用Darwin和live555实现的直播框架

    我们在开发视频直播或者监控类项目的时候,如场馆监控.学校监控.车载监控等等,往往首先希望的是形成一个项目的雏形,然后再在这个框架的基础上进行不断的完善和扩展工作,那么我们今天要给大家介绍的就是,如何形 ...

  6. android菜鸟学习笔记6----android布局(一)

    Android应用的UI组件都是继承自View类,View类表示的就是一个空白的矩形区域.常用的组件如TextView.Button.EditText等都直接或间接继承自View. 此外,View还有 ...

  7. 一些重要的地址:md5在线解密破解

    md5在线解密破解:https://www.cmd5.com/

  8. 题解 P3805 【【模板】manacher算法】

    题解 P3805 [[模板]manacher算法] 我们先看两个字符串: ABCCBA ABCDCBA 显然这两字符串是回文的 然而两个串的对称中心的特性不同,第一个串,它的对称中心在两个C中间,然而 ...

  9. Android学习之——优化篇(2)

    一.高级优化     上篇主要从0基础优化的方式,本篇主要将从程序执行性能的角度出发,分析各种经常使用方案的不足.并给出对象池技术.基础数据类型替换法.屏蔽函数计算三种能够节省资源开销和处理器时间的优 ...

  10. 关于Spring注解 @Service @Component @Controller @Repository 用法

    @Component 相当于实例化类的对象,其他三个注解可以理解为@Component的子注解或细化. 在annotaion配置注解中用@Component来表示一个通用注释用于说明一个类是一个spr ...