原理: 利用定时器去检查,如输入的是多少分钟后关机,就根据输入的分钟数产生一个COUNT计数器,计数器一直递减,直到1,然后执行关机。如输入的是几时几分关机,那么定时器会每次都检查系统的时间和你输入的时间是否一直,如果是就执行关机。

MFC做界面还真的是(可能是水平不行吧),怎么弄都是这个样,不好看...

为了防止多个程序同时运行,就限制系统只运行一个程序运行,如下(放到InitInstance中即可):

	HANDLE hSem=CreateSemaphore(NULL,1,1,m_pszExeName);//创建一个新的信号量

	if(GetLastError()==ERROR_ALREADY_EXISTS)//因为已经存在一个,所以创建失败
{
MessageBox(NULL,_T("程序已运行!!!"),NULL,0);
exit(2);
}

主要实现如下:

void CShutDownDlg::OnOK()
{
// TODO: Add extra validation here CString str4,str3,str2,str1,StrOut,s,t;
int a,b;
CTime Time=CTime::GetCurrentTime();//以下GetHour()函数需要先在这里得到当前时间对整个CTime结构体进行初始化
int temp=0;
flag0=0;//使用多少分钟后关机标志位
flag1=0;//使用几时几分关机标志位
m_Edit2.GetWindowText(str2);
m_Edit3.GetWindowText(str3);
m_Edit4.GetWindowText(str4);
if(atoi(str2)>0){//检查输入数据的有效性
flag0=1;
temp=atoi(str2);
count=temp*60;//转换为秒 int Hour = Time.GetHour();
int Min = Time.GetMinute(); a=(Hour+(Min+temp)/60)%24;
b=(Min+temp)%60;
s.Format("%d",a);
t.Format("%d",b); StrOut="系统将在"+s+"时"+t+"分自动关闭计算机,请注意保存文件!";
MessageBox(StrOut,NULL,0);
SetTimer(1,1000,NULL);
}
else if(atoi(str3)>0&&atoi(str4)>0) {//检查输入数据的有效性
flag1=1;
StrOut="系统将在"+str3+"时"+str4+"分自动关闭计算机,请注意保存文件!";
h=atoi(str3);
m=atoi(str4); MessageBox(StrOut,NULL,0);
SetTimer(1,1000,NULL);
}
else
{MessageBox("关机时间设置不正确,请检查!",NULL,MB_OK);return;}
MessageBox("我隐藏在进程里了哦:-)!",NULL,MB_OK);
ShowWindow(SW_HIDE);//懒得做任务栏小图标了,直接隐藏主程序吧,嘿嘿
}

定时

void CShutDownDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CTime tm=CTime::GetCurrentTime();
CString str,strt;
str=tm.Format("%m月%d日 %X");
m_Edit1.SetWindowText(str);
int hour = tm.GetHour();
int min = tm.GetMinute();
if(1==flag0)
{ count--;
if(1==count) {
if(0==SystemShutdown())
{
sndPlaySound ("c:\\sound\\music.wav ",SND_ASYNC);//加个声音提醒哈,怕你睡着了,需要导入winmm.lib库才能使用
MessageBox("关机失败");
}
exit(0);}
}
else if (1==flag1)
{
if(hour==h&&min==m)
{ if(0==SystemShutdown())
{
sndPlaySound ("c:\\sound\\music.wav ",SND_ASYNC);//加个声音提醒哈,怕你睡着了,需要导入winmm.lib库才能使用
MessageBox("关机失败");
exit(0);} }
}
} CDialog::OnTimer(nIDEvent);
}

关机实现函数SystemShutdown

bool SystemShutdown(){
HANDLE hToken;
TOKEN_PRIVILEGES tkp;//设置访问特权变量
//OpenProcessToken 获取进程的访问令牌
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken))
{
MessageBox(NULL,"获取访问令牌失败!",NULL,0);
return FALSE;
}
// LookupPrivilegeValue查看系统的特权值
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // 指定特权数组个数1
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;//启用特权
// AdjustTokenPrivileges的作用是通知Windows NT修改本进程的权利
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);//启用当前访问令牌的特权
if (GetLastError() != ERROR_SUCCESS) //失败
{
MessageBox(NULL,"获取权限失败!",NULL,0);
return FALSE;
}
if (!ExitWindowsEx(EWX_SHUTDOWN, 0)) //参数在这里设置。EWX_SHUTDOWN 为正常关机,强行退出为WINDOWSEWX_FORCE。
return FALSE;
return TRUE;
}

判断选择的是哪种模式的定时关机,加在OnTimer里

//更新:判断编辑框是否获得焦点,如编辑框2获得焦点,那么采用多少分钟后关机模式,则几时几分关机模式禁用
//如编辑框3或编辑框4获得焦点,那么采用几时几分关机模式,禁用多少分钟后关机模式
//如别的控件获得焦点,那么两个都可以使用
if(::GetFocus()==m_Edit2.GetSafeHwnd())
{
m_Edit3.SetWindowText(NULL);
m_Edit3.EnableWindow(FALSE);
m_Edit4.SetWindowText(NULL);
m_Edit4.EnableWindow(FALSE); }
else if(::GetFocus()==m_Edit3.GetSafeHwnd()||::GetFocus()==m_Edit4.GetSafeHwnd())
{
m_Edit2.SetWindowText(NULL);
m_Edit2.EnableWindow(FALSE);
}
else
{
m_Edit2.EnableWindow(TRUE);
m_Edit3.EnableWindow(TRUE);
m_Edit4.EnableWindow(TRUE);
}

我的定时关机程序(MFC实现) .的更多相关文章

  1. MFC定时关机程序的实现1

    写个定时关机程序自用,界面简单实用,最终界面如下 第一步,新建一个MFC对话框应用程序,拖几个控件过来, 界面如下: 然后给下拉列表框,复选按钮绑定变量,以方便进行操作. CComboBox m_co ...

  2. MFC定时关机程序的实现3-最小化到托盘栏

    这个定时关机运行过后默认最小化到托盘栏最好了,不用每次都去点了. 现在来看看如何将程序显示在托盘栏. 首先在头文件里声明一个变量和一个消息响应函数 //最小化到托盘栏 //第一步,生成一个成员变量,或 ...

  3. MFC定时关机程序的实现2-添加启动项到注册表

    虽然上一篇实现了的定时关机,但是还不够完善,比如开机自动启动,然后按照配置的时间定时关机,并最小化到任务栏. 先来说开机启动怎么实现,开机启动实现的方法有好几种,比如直接在开始菜单启动项里添加一个程序 ...

  4. window 定时关机小程序bat

    复制以下文本,新建txt文件并修改为bat后缀 如图: @echo off title 定时关机 echo 定时关机程序 echo ---------------------------------- ...

  5. C# 简单的定时关机

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. MFC入门(二)-- 提取输入框的字符串(定时关机的小程序)

    上篇文章已经让我们有了对于MFC最简单直观的认识,但貌似并无太大的交互性可言,而且其实也没有涉及到数据的交互,所以本文通过做一个时间可以调节的定时关机的Demo来演示. MFC入门(一)地址:http ...

  7. 【转载】Win7利用任务计划程序实现定时关机

    在Win7.Win8或者Win10系统中,如果要实现电脑的自动定时关机,不需要借用任何的外部程序,直接系统自带的任务计划程序即可实现电脑的定时自动关机,支持设定电脑关机时间以及执行频率次数,如固定每天 ...

  8. JAVA定时关机小程序

    大一刚学java时候做的小程序.由于当时迅雷还没有下载完成关机,晚上要下很多学习资料.只有自己算时间然后通过shutdown命令设置时间关机. 当时通过shutwodn命令,想到能否通过java做一个 ...

  9. Windows: 在系统启动时运行程序、定时计划任务、定时关机

    lesca今天介绍一些让系统在启动时,而非登录时,加载用户自定义的应用程序或脚本的方法,推荐度从前到后依次递减. 1. Windows任务计划(task scheduler) 用户可以按以下步骤进行操 ...

随机推荐

  1. 导入libxml.dylib用Google的GDataXML解析XML数据

    1.用Google的GDataXML来解析XML数据,导入libxml.dylib 2.导入libxml.dylib的操作实现,一开始自己总是找不到libxml.dylib文件. 选择其他文件,到路径 ...

  2. postgreSQL-如何查数据库表、字段以及字段类型、注释等信息?

    之前从网上也搜索了一些关于postgreSQL的系统表含义以及如何查表相关信息,但是都没有一个完整的内容,所以自己将找到的一些内容作了下整合,大家可以根据自己需要再对sql进行调整. --1.查询对象 ...

  3. 使用SQL Server视图的优缺点

    SQL Server视图我们经常会用的到,下面就为您介绍使用SQL Server视图的优缺点,希望可以对您SQL Server视图有更多的了解. 在程序设计的时候必须先了解视图的优缺点,这样可以扬长避 ...

  4. Python朝花夕拾

    Q1:HTTP Error 403: Forbidden python中经常使用urllib2.urlopen函数提取网页源码,但是有些时候这个函数返回的却是:HTTP Error 403: Forb ...

  5. Java Method Logging with AOP and Annotations

    Sometimes, I want to log (through slf4j and log4j) every execution of a method, seeing what argument ...

  6. ACdream 1726 A Math game

    深搜.不过有一个强大的剪枝.就是假设之后的全部用上都不能达到H,则return. if (A[n]-A[x-1]+summ< H) return; //A[n]表示前nx项和 #include& ...

  7. iOS上传图片详解

    iphone中图像通常存储在4个地方[相册.应用程序包.沙盒.Internet],通过这4个源,我们就可以存取应用图片. 相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过 ...

  8. Generating Faces with Deconvolution Networks

    用深度学习做人脸合成,website:https://zo7.github.io/blog/2016/09/25/generating-faces.html 受启发于 Learning to Gene ...

  9. Jmeter 多台机器产生负载

    使用多台机器产生负载的操作步骤如下: (1)在所有期望运行jmeter作为 负载生成器的机器上安装jmeter, 并确定其中一台机器作为 controller ,其他的的机器作为agent .然后运行 ...

  10. selenium webdriver学习-怎么等待页面元素加载完成

    http://blog.csdn.net/aerchi/article/details/8055913 WebDriverWait类和ExpectedCondition