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. Android 繪圖白板元件,有畫筆和板擦的功能 (转)

    package com.example.drawboard; import java.util.ArrayList; import java.util.List; import android.con ...

  2. 关于python webpy的request

    获取get值i = web.input()keyword = i.get('keyword') 判断get值是否存在if i.has_key('keyword')

  3. UIScrollView奇葩不滑动

    首先要说声尼玛,真奇葩,从来都没有遇到过这个问题,首先描述一下背景: 我是用XIB拖拽了一个UIScrollView在View上,然后设置了frame,在ViewDidLoad里面,设置了scroll ...

  4. scrapy架构解析

  5. Intellij Idea生成JavaDoc

    JavaDoc是一种将注释生成HTML文档的技术,生成的HTML文档类似于Java的API,易读且清晰明了.在简略介绍JavaDoc写法之后,再看一下在Intellij Idea 中如何将代码中的注释 ...

  6. Java for LeetCode 122 Best Time to Buy and Sell Stock II

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  7. matplotlib和numpy 学习笔记

    1. 在二维坐标系中画一个曲线 import matplotlib.pyplot as plt #data len=400, store int value data = [] #set x,y轴坐标 ...

  8. Algorithm: inversion

    inversion就是逆序对 题目:现给出一个数列,求该数列中的逆序对数(逆序数).本节给出三种方法:方法一是最直接的暴力方法:方法二是基于归并分治的思想:方法三是基于线段树的.   [解法一] 暴力 ...

  9. 使用expect实现shell自动交互

    expect 是一个自动交互功能的工具.expect 是开了一个子进程,通过 spawn 来执行 shell 脚本,监测到脚本的返回结果,通过 expect 判断要进行的交互输入内容. expect ...

  10. logback 配置详解(下)

    logback 常用配置详解(二) <appender> <appender>: <appender>是<configuration>的子节点,是负责写 ...