用vc.net实现记录开关机时间的程序
2007-03-16 21:56:21 来源:WEB开发网核心提示: 这两句的作用是注册一个Ctrl+J的热键,再为该对话框类添加一个BOOL型成员变量:m_bShow;用来表示对话框当前是显示还是隐藏,用vc.net实现记录开关机时间的程序(4),当然这个变量初始化为false,因为对话框开始时不可见,希望你们能告诉我,自此这个小程序的全部代码编写完成,既
这两句的作用是注册一个Ctrl+J的热键。
再为该对话框类添加一个BOOL型成员变量:m_bShow;用来表示对话框当前是显示还是隐藏。当然这个变量
初始化为false,因为对话框开始时不可见。既然注册了热键,就要接收消息以判断用户是否按了热键,因此要重载对话框类的PreTranslateMessage(MSG* pMsg),从消息中截获热键消息:
if(pMsg->message==WM_HOTKEY && pMsg->wParam==0Xa001)
{
if(m_bShow==true)
ShowWindow(SW_HIDE);
else
ShowWindow(SW_SHOW);
m_bShow=!m_bShow;
}
再在对话框的OnClose()中加上两句 :
UnregisterHotKey(this->m_hWnd,0Xa001);
DestroyWindow();
好了,现在运行看看,是不是能响应热键了?4、实现记录时间
要记录时间,就要用到MFC的CTime类,这个类可以很方便地处理时间日期相关的问题。为了更高效地处理记录时间问题,我封装了一个函数:
void WriteTime(CString strNote)
{
CString strTime,str,strDate,strFileName;
int t;
DWORD dwAttr;
CTime time=CTime::GetCurrentTime();//得到当前系统时间
t=time.GetHour();
str.Format("%d",t);
strTime=str;
t=time.GetMinute();
str.Format("%d",t);
strTime=strTime+":"+str;
t=time.GetSecond();
str.Format("%d",t);
strTime=strTime+":"+str;
t=time.GetYear();
str.Format("%d",t);
strDate=str;
t=time.GetMonth();
str.Format("%d",t);
strDate=strDate+"-"+str;
t=time.GetDay();
str.Format("%d",t);
strDate=strDate+"-"+str;
strFileName="time.txt";
dwAttr=GetFileAttributes(strFileName);
if(dwAttr==0xFFFFFFFF)//如果该文件不存在就创建一个
{
CStdioFile file;
file.Open(strFileName,CFile::modeCreate|CFile::modeWrite);
file.Close();
}
CStdioFile file;
file.Open(strFileName,CFile::modeWrite);
file.SeekToEnd();//这一句很重要,不然会将以前写的覆盖
file.WriteString(strDate+" "+strTime+" "+strNote);
file.WriteString("
");
file.Close();
}
其中strNote参数是一个备注,本函数的作用是将当前系统时间记录在一个time.txt文件中,比如:2003-3-15 0:31:25 开机
开机是strNote(备注)。
因此,当要记录开机时间时可以调用WriteTime(“开机”);
要记录关机时间可以用WriteTime(“关机”);
5、实现关机时记录时间
如何在系统关闭也就是关机时得到通知呢?当关机时,系统向还在运行的程序发送WM_QUERYENDSESSION消息,以询问该程序是否可以结束,因此可以对这个消息进行响应,源码如下:
BOOL CGetTimeDlg::OnQueryEndSession()
{
if (!CDialog::OnQueryEndSession())
return FALSE;
WriteTime("关机");
// TODO: 在此添加专用的查询结束会话代码
return TRUE;
}
这里要注意一点:这种记录关机时间的方法有一定的局限,比如用户注销,重启时都可能被记录为关机。而且当强制关机时,系统不再向程序发送WM_QUERYENDSESSION消息,这时这种方法不起作用。如果大家有什么更好的办法,希望你们能告诉我。自此这个小程序的全部代码编写完成,该程序在vc.net+win2000下调试通过。
更多精彩
赞助商链接