分类:
2008-10-13 16:51:23
如何关闭系统
来自msdn,但还不能说翻译的,哈哈。。。。。。
哪说的不对给指出呀,-----啊?太多!?哈哈,太多就别指了,。。。。。。
适用于: Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.
Windows Server 2003, Windows 2000 Server, or Windows NT Server。
主要函数说明:
ExitWindowsEx
这个函数主销当前用户,关闭或重起系统。这个函数发送WM_QUERYENDSESSION消息给所有运行的应用程序去结束自己,如果他们可以结束
的话。
函数原型:
BOOL ExitWindowsEx(
UINT uFlags,
DWORD dwReason
);
参数:
uFlags
[输入] 关闭类型. 必须是下列值之一.
EWX_LOGOFF: 关闭所有在当前会话中运行的进程。
EWX_POWEROFF: 关闭系统和电源.系统必须支持电源关闭功能。调用进程必须有 SE_SHUTDOWN_NAME特权。
EWX_REBOOT:关闭和重起系统。 调用进程必须有 SE_SHUTDOWN_NAME特权。
EWX_SHUTDOWN: 安全关闭系统。 所有缓冲区数据都已存盘并且所有进程都停止。
调用进程必须有 SE_SHUTDOWN_NAME特权。
指定这个选项即使系统支持关闭电源功能也将不能关闭电源。你必须指定 EWX_POWEROFF选项。
Windows XP SP1: 如果系统支持关闭电源功能, 可以通过这个选项关掉电源.
这个参数也可以包含下列值.
EWX_FORCE:强制关机。系统部发送WM_QUERYENDSESSION 和WM_ENDSESSION 消息. 这将引起应用程序丢失数据,因此,除非紧急情况不要使用。
Windows XP: 如果计算机所定或者这个选项没指定,调用将失败。
EWX_FORCEIFHUNG 强制关机。如果一些程序没有响应 WM_QUERYENDSESSION 或 WM_ENDSESSION 消息。
Windows NT 和 Windows Me/98/95: 不支持。
dwReason
[输入] 关机码.
Windows 2000/NT and Windows Me/98/95: 忽略这个参数.
返回值:成功返回0。
源代码:
BOOL MySystemShutdown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Get a token for this process.
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
return( FALSE );
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
(PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS)
return FALSE;
// Shut down the system and force all applications to close.
if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0))
return FALSE;
return TRUE;
}