WINDOSW编程学习笔记 - 关机

转载 2016年08月31日 10:52:53
说明:本文无参考价值。
主要API:ExitWindows同ExitWindowsEx相同。ExitWindowsEX()函数用来退出、重启或注销系统。

函数原型:
BOOLExitWindowsEx(
UINTuFlags, // 关闭参数
DWORDdwReserved // 系统保留,一般取0
);

参数uFlags:指定关闭的类型。此参数必须有下列值的组合: 

EWX_FORCE
强制终止进程。当此标志设置,Windows不会发送消息WM_QUERYENDSESSION和WM_ENDSESSION的消息给目前在系统中运行的程序。这可能会导致应用程序丢失数据。因此,你应该只在紧急情况下使用此标志。

EWX_LOGOFF
关闭所有进程,然后注销用户。

EWX_POWEROFF
关闭系统并关闭电源。该系统必须支持断电。
Windows要求:Windows NT中调用进程必须有 SE_SHUTDOWN_NAME 特权。
Windows 9X中:可以直接调用。

EWX_REBOOT
关闭系统,然后重新启动系统。

Windows要求:
Windows NT中:调用进程必须有SE_SHUTDOWN_NAME特权。
Windows 9X中:可以直接调用。

EWX_SHUTDOWN
关闭系统,安全地关闭电源。所有文件缓冲区已经刷新到磁盘上,所有正在运行的进程已经停止。
Windows要求:
Windows NT中:调用进程必须有SE_SHUTDOWN_NAME特权。
Windows 9X中:可以直接调用。

参数dwReserved
保留,这参数被忽略。一般取0。

返回值:如果函数成功,返回值为非零。
如果函数失败,返回值是零。想获得更多错误信息,请调用GetLastError函数。

SE_SHUTDOWN_NAME 特权
Windows NT中:关闭或重新启动系统,调用进程必须使用AdjustTokenPrivileges函数使SE_SHUTDOWN_NAME特权。
Windows 95中:安全特权,不支持或需要。

实例代码:
Windows 9X:
ExitWindowsEx(EWX_SHUTDOWN, 0); //关闭系统
ExitWindowsEx(EWX_REBOOT, 0); //重启系统
Windows NT/2000/XP:
以下给出一个函数
如果不是MFC,加入以下语句在该函数之前
#define BOOL int
#define TRUE 1
#define FALSE 0
如果是,直接加入
BOOL SystemShutdown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
/* OpenProcessToken() 这个函数的作用是打开一个进程的访问令牌
GetCurrentProcess() 函数的作用是得到本进程的句柄*/
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken))
return FALSE;
//LookupPrivilegeValue()的作用是查看系统权限的特权值,返回信息到一个LUID结构体里。
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set 赋给本进程特权
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// AdjustTokenPrivileges()的作用是通知Windows NT修改本进程的权利
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS) //失败
return FALSE;
if (!ExitWindowsEx(EWX_POWEROFF | EWX_FORCE, 0)) //参数在这里设置。强行退出WINDOWS(EWX_FORCE)。
return FALSE;
return TRUE;
}

为Android增加一个关机命令

首先在external目录下创建一个目录shutdown,然后进入shutdown目录,创建两个文件Android.mk和shutdown.c,增加内容如下: #define LOG_TAG "shu...
  • mcgrady_tracy
  • mcgrady_tracy
  • 2015年06月02日 16:59
  • 630

在c语言编程中怎么用代码解除关机命令

不用愁 shut) { sprintf(str str); l=strlen(str); if(l==1 && str[0]==50)return 1; else return 0;}int m...
  • bugrnm
  • bugrnm
  • 2008年10月20日 09:10
  • 3674

《MySQL高效编程》学习笔记--基础篇

启动MySQL监视器创建数据库–启动–mysql -u yonghuming -p mysql -u yonghuming -p密码 无密码可省略 -p–设定root密码–mysqladmin ...
  • qwerty_bibabo
  • qwerty_bibabo
  • 2017年02月07日 19:50
  • 1545

windows cmd 命令大全

有关某个命令的详细信息,请键入 HELP 命令名ASSOC 显示或修改文件扩展名关联。AT 计划在计算机上运行的命令和程序。ATTRIB 显示或更改文件属性。BREAK 设置或清除扩展式 CTRL+C...
  • jansonleader
  • jansonleader
  • 2010年03月19日 16:22
  • 4081

《GPU高性能编程CUDA实战》学习笔记(二)

第二章: 下载软件+配置cuda c代码环境 读过小王博客的都知道,小王现在使用的是同事电脑,暂时不需要安装cuda c编译环境,但是本书既然介绍到这里,那大家和我先大概了解一下吧。 2.1开发环...
  • w09103419
  • w09103419
  • 2016年09月09日 10:04
  • 1191

《GPU高性能编程CUDA实战》学习笔记(一)

第一天读这本书,先将封面让大家看看吧 这两张图好大啊,不过读者会更加清晰的看到作者信息,这样也不错。 近年来英伟达在CUDA上float运算性能基本上已经超过了cpu,并且gpu(Gr...
  • w09103419
  • w09103419
  • 2016年09月08日 17:17
  • 2106

Autoit3 编程学习笔记

首先放一下官方的链接 http://www.jb51.net/shouce/autoit/安装首先安装还是非常方便的,直接去官网下载ZIP安装包,然后下载后解压就可以得到一个install文件夹,进...
  • qq_35078631
  • qq_35078631
  • 2017年10月03日 08:32
  • 260

C++中控制Windows关机的实用技巧

我们在应用程序编制完成后,需要设计应用程序的包装和分发功能。在编写安装程序时,经常会遇到这样的问题:程序安装完成后需要重新启动计算机。那么在代码中如何控制Windows的关机或重新启动呢?  要实现这...
  • jacksonwj
  • jacksonwj
  • 2005年03月26日 22:20
  • 750

一个windosw端向linux端传文件python脚本

# coding=utf-8 #writer:zyh #time:20170917 import paramiko import datetime import os hostname = '...
  • xx5595480
  • xx5595480
  • 2017年09月17日 16:17
  • 173

java mail 学习笔记

JAVA MAIL 学习 笔记电子邮件协议的简介SMTP 简单邮件传输SMTP是Simple Mail Transfer Protocol的简称,即简单邮件传输协议。该协议定义了邮件客户端软件和SMT...
  • qq_28334041
  • qq_28334041
  • 2017年03月28日 22:04
  • 409
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WINDOSW编程学习笔记 - 关机
举报原因:
原因补充:

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