编写一个闹钟和定时关机工具(MFC VS2010)

简介: 这个小工具在自己生活当中能用到,运行软件以后,会显示当前的系统时间,然后你可以设定时间,再选择是定时响铃还是关机。截图如下: 前言:本程序采用visual studio 2010 ,对话框类型的应用程序,生成的类视图如下,右边为CTimeDlg类的本分函数:     主要的实现方法和关键点如下: 1.

这个小工具在自己生活当中能用到,运行软件以后,会显示当前的系统时间,然后你可以设定时间,再选择是定时响铃还是关机。截图如下:

Untitled

前言:本程序采用visual studio 2010 ,对话框类型的应用程序,生成的类视图如下,右边为CTimeDlg类的本分函数:

Untitled1

 

 

主要的实现方法和关键点如下:

1.怎样获得系统时

为CTimeDlg类添加成员变量 CTime m_CurrentTime;

                                             m_CurrentTime=CTime::GetCurrentTime();

然后获得int型的时/分/秒:   m_H=m_CurrentTime.GetHour();

                                            m_M=m_CurrentTime.GetMinute();

                                            m_S=m_CurrentTime.GetSecond();

   其中m_H/m_M/m_S是三个编辑框的成员函数。

2.动态显示系统时间

动态显示系统时间需要用到定时器,然后每一秒钟都会发送WM_TIME。还要给CTimeDlg类添加WM_TIME消息处理函数OnTime().

为此首先要建立一个计时器:

                     SetTimer(1,1000,NULL);   //use here ,after the m_whnd has been created!!!

  因为有CWnd::SetTimer(),所以第三个参数是NULL,会由void CTimeDlg::OnTimer(UINT_PTR nIDEvent)经过消息映射来处理。

另外要注意的是在调用SetTimer(1,1000,NULL); 之前必须已经建立了窗口也就是m_hwnd已经被赋值,应为SetTimer(1,1000,NULL)继承于CWnd,必须要有一个对象才能调用,所以我在:BOOL CTimeDlg::OnInitDialog()里面定义了计时器。刚开始自己是在CTimeDlg::CTimeDlg(CWnd* pParent /*=NULL*/)构造函数里定义结果是出现断言错误,因为m_hwnd还未被建立。

3.播放铃声

此版本我没有添加可自定义自己的铃声这个功能,可以告诉大家DirectShow可以实现播放各种格式的音频和视频,如果有需要以后自己会加上这个功能,另外还有最小化到托盘等琐碎功能,(嘿嘿,其实就是很琐碎,不断地调试,不断的查阅MSDN~~)。

使用了播放系统错误警告的函数:MessageBeep(0x00000030L);

4.关机

有好几个函数可以实现系统关机,此处选择的是:

     InitiateSystemShutdown(NULL,_T("Attention! Your Computer is going to SHUTDOWN."),5,FALSE,FALSE);

好了主要的点都已经列清楚,对于其中各个函数的意义和参数,大家可以查阅MSDN,详细的就不说了,下面是主要代码:

/主要是编辑框实现DDX动态数据交换

void CTimeDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1, m_H);
    DDX_Text(pDX, IDC_EDIT2, m_M);
    DDX_Text(pDX, IDC_EDIT3, m_S);
    DDX_Text(pDX, IDC_EDIT4, m_AP);
    DDX_Text(pDX, IDC_EDIT5, m_SetH);
    DDV_MinMaxInt(pDX, m_SetH, 0, 24);
    DDX_Text(pDX, IDC_EDIT6, m_SetM);
    DDV_MinMaxInt(pDX, m_SetM, 0, 60);
    DDX_Text(pDX, IDC_EDIT7, m_SetS);
    DDV_MinMaxInt(pDX, m_SetS, 0, 60);
}

BEGIN_MESSAGE_MAP(CTimeDlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_WM_TIMER()
    ON_EN_CHANGE(IDC_EDIT1, &CTimeDlg::OnEnChangeEdit1)
    ON_EN_CHANGE(IDC_EDIT2, &CTimeDlg::OnEnChangeEdit2)
    ON_EN_CHANGE(IDC_EDIT3, &CTimeDlg::OnEnChangeEdit3)
    ON_EN_CHANGE(IDC_EDIT4, &CTimeDlg::OnEnChangeEdit4)
    ON_EN_CHANGE(IDC_EDIT5, &CTimeDlg::OnEnChangeEdit5)
    ON_EN_CHANGE(IDC_EDIT6, &CTimeDlg::OnEnChangeEdit6)
    ON_EN_CHANGE(IDC_EDIT7, &CTimeDlg::OnEnChangeEdit7)
    ON_BN_CLICKED(IDC_BUTTON1, &CTimeDlg::OnBnClickedButton1)
    ON_BN_CLICKED(IDC_BUTTON2, &CTimeDlg::OnBnClickedButton2)
END_MESSAGE_MAP()

//处理WM_TIME消息的函数

void CTimeDlg::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    if(nIDEvent==1)
    {
        m_CurrentTime=CTime::GetCurrentTime();
        if (m_CurrentTime.GetHour()>12)
        {
            m_H=m_CurrentTime.GetHour()-12;
            m_AP=_T("PM");
        }
        else
        {
            m_H=m_CurrentTime.GetHour();
            m_AP=_T("AM");
        }
        m_M=m_CurrentTime.GetMinute();
        m_S=m_CurrentTime.GetSecond();
        OnEnChangeEdit1();
        OnEnChangeEdit2();
        OnEnChangeEdit3();
        OnEnChangeEdit4();

        //function for your choose;
        if ((m_SetH==m_CurrentTime.GetHour())&&(m_SetM==m_M))
        {
            if(m_ChooseFunc==1)
                   MessageBeep(0x00000030L);
            else if(m_ChooseFunc==2)
                  InitiateSystemShutdown(NULL,_T("Attention! Your Computer is going to SHUTDOWN."),5,FALSE,FALSE);
        }
    }

技术改变世界! --狂诗绝剑
目录
相关文章
|
6月前
|
安全 数据库 数据安全/隐私保护
基于易语言开发的定时关机程序
基于易语言开发的定时关机程序
59 0
MASM32编程更新SysInfo,运行时程序窗口玩失踪
MASM32编程更新SysInfo,运行时程序窗口玩失踪
|
2月前
|
监控
编程使用系统热键{定时器SetTimer()和GetAsyncKeyState()}
编程使用系统热键{定时器SetTimer()和GetAsyncKeyState()}
|
6月前
简单的Winform秒表工具
简单的Winform秒表工具
73 0
|
12月前
|
监控
Qt Qml 实现键鼠长时间未操作锁屏
项目中需要实时检测用户是否长时间为操作键盘和鼠标,如果超过预设时间未操作键盘和鼠标,则退出到锁屏界面,准确的说是启动屏保,当用户再次操作键盘或鼠标,则进去登录界面,及实现长时间未操作键盘鼠标就锁屏的功能。
|
网络安全 数据安全/隐私保护 Windows
[笔记] Windows VBS脚本实现自动输入 解放双手 自动测试
[笔记] Windows VBS脚本实现自动输入 解放双手 自动测试
299 0
|
数据可视化 C++ Windows
非可视化编程的windows窗口 C++ 代码设计:附例程并多多知识点
非可视化编程的windows窗口 C++ 代码设计:附例程并多多知识点
233 0
|
Windows
Win系统 - 如何关闭烦人的Windows10自动更新(一)
Win系统 - 如何关闭烦人的Windows10自动更新(一)
166 0
Win系统 - 如何关闭烦人的Windows10自动更新(一)
|
Shell Windows
Windows程序设计打开另一个程序的三种方法
Windows程序设计打开另一个程序的三种方法
558 0
我的定时关机程序(MFC实现) .
原理: 利用定时器去检查,如输入的是多少分钟后关机,就根据输入的分钟数产生一个COUNT计数器,计数器一直递减,直到1,然后执行关机。如输入的是几时几分关机,那么定时器会每次都检查系统的时间和你输入的时间是否一直,如果是就执行关机。
821 0