C实现关机

说明:下面文章都是居于杨中科的C语言可以干大事系列视频的。用C写一些小的桌面应用程序。主要是锻炼编程的思维。

.在Windows2000一下的操作系统版本,直接就可以调用Windows自带的API,即系统关机函数。BOOL ExitWindowsEx(UINT uFlags,DWORD dwReason);uFlags的值:
EWX_LOGOFF,0,注销
EWX_SHUTDOWN,1,关机
EWX_REBOOT,2,重启
EWX_POWEROFF,8,断开电源
EWX_FORCE,4,强制终止所有程序
EWX_FORCEIFHUNG,16,强制终止位响应的程序

后面的dwReason一般不指定,可能是历史遗留的问题吧。我们在使用的时候直接将其置为 0就ok了。

2.但是在Windows2000以上包括Windows2000的系统,如果只是点用此函数,只能实现注销的功能,其余的功能还需要在程序中写代码来获取相应的权限:在Main_OnInitDialog函数中,即窗口初始化的时候取得相应的关机权限,代码如下:

我将其抽象为一个函数吧GetPrivilege()

{

      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.

//
    // Add initializing code here
    //

}

由于本人水平有限,错误很多,请各位大侠热心赐教,谢谢!可以给我留言。


作者:GY小小鸟
         
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/YangFengHui/p/CLanguage.html