浅谈系统的定时关机

在写这个程序之前,我曾看到过别人用SDK写的关机程序。不过他的程序只在WIN9X下有效,在2000中就不行了,不能关机只能注销。因为2000属于多用户操作系统,要想关机就要获得权限。在查阅了MSDN后整理出了这个关机程序。 TOKEN_PRIVILEGES tkp;
  HANDLE hToken;

    if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
  {
    MessageBox("OpenProcessToken failed!");
  }
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);   //获得本地机唯一的标识
  tkp.PrivilegeCount = 1; 
  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0);   //调整获得的权限

  if (GetLastError() != ERROR_SUCCESS)
  {
      MessageBox("AdjustTokenPrivileges enable failed!");
  }
    fResult =InitiateSystemShutdown(
       NULL,         // 要关的计算机用户名,可在局域网网中关掉对方的机器,NULL表示关本机
       "由于系统不稳定,WINDOWS将在上面的时间内关机,请做好保存工作!", // 显示的消息
       10,                // 关机所需的时间
       TRUE,
       TRUE);   //设为TRUE为重起,设为FALSE为关机
    if(!fResult)
    {
       MessageBox("InitiateSystemShutdown failed.");
  }
    tkp.Privileges[0].Attributes = 0;
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0);
    if (GetLastError() != ERROR_SUCCESS)
  {
       MessageBox("AdjustTokenPrivileges disable failed.");
  }
    ExitWindowsEx(EWX_SHUTDOWN,0);   //开始关机
   
图一是程序运行画面:

图一

具体实现细节请查阅源代码。WIN2000 + VC++6.0下通过编译。

本文配套源码

时间: 2024-09-10 12:42:06

浅谈系统的定时关机的相关文章

浅谈Linux配置定时,使用crontab -e与直接编辑/etc/crontab的区别_Linux

Linux配置定时任务,大家都知道使用crontab这个系统功能,但有时候我们需要区分用户执行,下面就直接说一下2种方法的区别: 方法1: 使用命令 crontab -e 然后直接编辑定时脚本. 这样执行以后,属于用户自定义的,会被写到 /var/spool/cron 目录下,生成一个和用户名一致的文件,文件内容就是我们编辑的定时脚本. 如: [root@localhost cron.d]# cd /var/spool/cron [root@localhost cron]# ll 总用量 4 -

怎么设置WIN8系统的定时关机与取消

怎么设置WIN8系统的定时关机与取消   工具/原料 笔记本电脑 WIN8系统 方法/步骤 首先点击电脑左下角"开始"按钮,选择"控制面板",如下图所示,然后点击"系统和安全". 在管理工具里面选择"计划任务".打开任务计划程序界面后,在右边操作区选择"创建基本任务". 在打开的创建基本任务界面,填写创建的名称.这里填"定时关机",然后点击"下一步". 在打开的任务触

win7系统下定时关机功能全面应用

win7系统下定时关机功能全面应用:怎么对win7系统设定关机等待时间 经常有用户会发现,在win7系统关机过程中,会出现一个等待系统关闭的提示,我们需要等一段时间才可以把电脑关闭,即使很多的用户已经习惯了这些默认设置,还是想要把关机时间缩短.那么该如何对关机等待时间进行设置呢?下面就来看看小编是怎么操作的. 1.首先,咱们同时按下win7键盘上的win+R快捷键打开电脑的运行窗口,之后,咱们在打开的运行窗口中输入regedit并单击回车,这样就可以打开电脑的注册表编辑器窗口了. 2.在打开的注

浅谈系统的非定时自动关机

我们经常遇见定时关机的情况,我在此提出的非定时关机,是应用在我们不能预料我们的作业什么时候完成的情况下,举个例子:本人平时在用matlab运行某算法训练大量数据时,由于难以判断其训练时间长短(有时是几小时),没有耐心去等,但我注意到,在训练数据时,CUP利用一直是100%或100%稍左,我们可以试着自己编个程序来等待CPU利用率为0时关机(即matlab训练结束时).但有一点,必须在matlab程序里有保存数据的代码,以确保训练的参数得以保存. 如何得到CPU占用率呢(在Win2k下),本人参考

用WINRAR命令实现系统自动定时关机

Windows 2000要实现自动定时关机,方法有很多,比如借用Windows 98的Rundll.exe,或者借用Windows XP的Shutdown.exe命令等.其实,利用压缩软件WinRAR中的Rar命令也可以实现自动定时关机: 第一步:右击桌面空白处,选择"新建→快捷方式",弹出"创建快捷方式"窗口,点击"浏览",在浏览文件夹窗口找到WinRAR安装目录D:\Program files\winrar\Rar.exe,按"确定

win8.1系统怎么定时关机?

  1.我们找到电脑屏幕左下角的win图标,然后右键单击该图标,在弹出的选项里选择"控制面板"; 2.进入到控制面板之后我们选择"系统和安全"选项; 3.接下来会进入到系统和安全设置面板,在底部会有一个"管理工具"选项,我们选择该选项下方的"计划任务"按钮; 4.然后会进入到创建任务面板,我们单击右侧的"创建基本任务"选项; 5.接下来我们在名称跟描述里面输入我们这次要做的事情,我们是要设置定时关机,那么我

Win8系统自动关机命令以及定时关机技巧

  在Win8/8.1系统中如何实现系统自动定时关机呢?下面系小编就为大家介绍一下Win8系统自动关机命令以及定时关机技巧. 1.首先,我们通过Win+Q打开搜索,搜索"计划任务"并打开它; 2.在任务计划程序"中单击"创建基本任务",打开任务向导; 3.在"创建基本任务向导"中名称一栏,输入事件名称,如"关机",点击"下一步"; 4.触发器选择关机频率和时机,然后下一步; 5.在"操作

linux定时关机命令是什么?

  linux定时关机命令是什么?在之前的教程中,我们分享了win7系统定时关机命令的使用方法,给网友们带来了不少的便利.也有网友使用的是Linux系统,因此,他们好奇:Linux系统的定时关机命令跟win7系统的一样吗?Linux系统定时关机的命令是什么?在今天的教程中,我们就简单了解一下同样的功能在linux下使用shutdown命令和在Windows下使用shutdown命令的不同. 系统关机 1.linux下:shutdown [选项] 有如下选项: - k =>不执行任何关机操作,只发

浅谈linux几种定时函数的使用_Linux

在程序开发过程中,我们时不时要用到一些定时器,通常如果时间精度要求不高,可以使用sleep,uslepp函数让进程睡眠一段时间来实现定时, 前者单位为秒(s),后者为微妙(us):但有时候我们又不想让进程睡眠阻塞在哪儿,我们需要进程正常执行,当到达规定的时间时再去执行相应的操作, 在linux下面我们一般使用alarm函数跟setitimer函数来实现定时功能: 下面对这两个函数进行详细分析: (1)alarm函数 alarm也称为闹钟函数,它可以在进程中设置一个定时器,当定时器指定的时间到时,