• 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小小鸟
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    比较.NET程序集(DLL或EXE)是否相同
    [转] JavaScript数组去重(12种方法)
    [转] js网络请求跨域问题汇总(携带cookie)
    [转] JS中arr.forEach()如何跳出循环
    [转] vue前端异常监控sentry实践
    [转] vue父组件触发子组件事件
    [转] vue 自定义组件使用v-model
    [转] Nginx配置性能优化
    [转] linux 查找文本过滤grep正则表达式命令详解用法
    [转] Nginx配置中的location、root、alias
  • 原文地址:https://www.cnblogs.com/YangFengHui/p/CLanguage.html
Copyright © 2020-2023  润新知