Chinaunix首页 | 论坛 | 博客
  • 博客访问: 588533
  • 博文数量: 752
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(752)

文章存档

2011年(1)

2008年(751)

我的朋友

分类:

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;
}


--------------------next---------------------

阅读(466) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~