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

转载 2011年10月12日 16:30:28
 

  


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


精通Windows API高级编程-Windows图形界面编程

Windows的API(Application Programming Interface,应用程序编程接口),是Windows 操作系统提供给应用程序的大量函数,学习本课程,不仅可以掌握Windows界面编程,开发华丽的Windows桌面运用程序,也可以为MFC框架的学习奠定扎实的基础,同时是否熟练的掌握Windows API开发,也是企业考量优秀程序员一个非常重要的指标!
  • 2018年04月15日 22:52

整理出来的一个windows关机、锁定、重启、注销 API调用 .

using System.Runtime.InteropServices;    namespace HookDemo  {      class WindowsExit      {        ...
  • lchwhy
  • lchwhy
  • 2011-11-13 10:28:31
  • 280

C# WINDOWS API关机

  • 2011年10月24日 08:44
  • 979KB
  • 下载

MFC通过windowsAPI控制计算机关机,注销,重启

  • 2017年03月19日 10:55
  • 18KB
  • 下载

WindowsAPI关机、重启

#include "Windows.h" //强制关闭计算机 bool systemShutDown() {     HANDLE hToken;     TOKEN_PRI...
  • u014597198
  • u014597198
  • 2017-07-18 13:21:55
  • 318

在windows中利用cmd进行定时关机(重启,注销)

window系统使用cmd命令关机 先来学习一个命令 shutdown //这个命令本省的意思就是关机的意思,下面看一下它的参数 -s //...
  • qq_26941173
  • qq_26941173
  • 2016-04-18 11:07:05
  • 4699

调用Windows API实现关机

关键有两条:1.得到定时开始到现在的时间差                  2.如何实现关闭计算机的功能 实现计算机关闭可以使用windows api解决。这里需要Qt Creator安装目录下...
  • yangluoning
  • yangluoning
  • 2013-01-26 12:15:15
  • 3703

Linux 指令学习之 关机、注销和重启

1关机命令 shutdown   好像ubuntu的终端中默认的是当前用户的命令,只是普通用户,因此在终端器中可以使用sudo -sh 转换到管理员root用户下执行命令。   1)shutdow...
  • zhouzhiwengang
  • zhouzhiwengang
  • 2014-11-23 15:15:37
  • 913

pb 关机 重启 注销

  • 2011年04月03日 22:47
  • 32KB
  • 下载

[BAT]用批处理控制计算机(关机,重启,锁定,注销,修改时间)

@ECHO offTITLE 自动关机程序 :startCLSCOLOR 1frem 使用COLOR命令对控制台输出颜色进行更改MODE con: COLS=41 LINES=18rem MODE语句...
  • szwangdf
  • szwangdf
  • 2007-09-03 23:10:00
  • 4566
收藏助手
不良信息举报
您举报文章:整理出来的一个windows关机、锁定、重启、注销 API调用
举报原因:
原因补充:

(最多只允许输入30个字)