WEB开发网
开发学院软件开发VC 用vc.net实现记录开关机时间的程序 阅读

用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下调试通过。

上一页  1 2 3 4 

Tags:vc net 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接