原理: 利用定时器去检查,如输入的是多少分钟后关机,就根据输入的分钟数产生一个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的定时关机程序,输入时间就可以自动关机了
初学MFC实现自动关机小程序,因为初学,所以没有实现修改注册表,所以要使程序顺利执行,必须确保系统服务项Task Scheduler启用。
这是用MFC开发的一个定时关机的程序,设置时间就可以到时关闭计算机了。
本程序是用c++加mfc写的一个定时关机小程序,代码简单,紧紧是新手学习定时器的使用时参考学习。
基于MFC的定时关机程序,用C写打,本人纯手打,很适合新手。
本人刚学对话框时做的一个软件,看到同学们都在用别人写得关机软件,有冲动,就写了一个。感觉还不错,做得还可以。初学之作,肯定还有很多不足,望各位指出和加以修正。
VC++ 实现定时关机或者休眠: 可以实现以秒、分钟、小时和天为单位来定时关机或者休眠,可以保存并记忆。而且可以随时取消定时关机。 网上有好多 TimePowerOff 例子,只有关机,并没有休眠,本程序增加这一功能; ...
这是用MFC编写的一个定时开关机程序,并且可以支持系统托盘化管理。
可以定时关机 一个用MFC VC 写的小程序,用来定时关机,里面有详解每句的意思
用mfc写的windows定时关机小程序 方便实用 欢迎下载
自己写的定时关机小程序,简洁,附源码,可用于二次开发
利用MFC写的定时开关机程序,界面简洁,程序简单易懂,适合新手参考学习。
MFC做的小程序,实现电脑定时自动关机.饱满的界面显示,卡哇伊
定时关机程序源代码 VC MFC 权限问题
VC实现定时关机程序。非常经典。很好的学习材料。其中主要应用了定时器,和托盘程序的联合实现。
VC++ 实现定时关机或者休眠-MFC 对话框应用程序: 可以实现以秒、分钟、小时和天为单位来定时关机或者休眠,可以保存并记忆。而且可以随时取消定时关机。 网上有好多 TimePowerOff 例子,只有关机,并没有休眠,本...
windows定时关机程序,可以实现在任何时候关机。mfc代码。
--------定时关机的小程序-------- 睡觉的时候有时喜欢打开音乐播放器,听听歌,然后设个定时关机,然后把显示器关掉,上床睡觉;可有时候如果快到设定的关机时间时又不想让它关机了,还想再继续听听,就得打开...