自制360开机小助手

来源:互联网 发布:丝绸之路 知乎 编辑:程序博客网 时间:2024/05/01 05:04

每次开机看到360的开机小助手,都非常羡慕,要是自己写一个多好啊。

今天,pearry就带大家来自己动手写开机小助手。

主要知识:

1.获取系统运行时间

涉及的API函数:GetTickCount() //获取系统运行时间(毫秒)

2.计时器

每秒刷新数据。

涉及的API函数:SetTimer、KillTimer

3.获取文件路径

设置开机启动时使用

涉及的API函数: GetCurrentDirectory(); //获取程序的当前目录

4.注册表操作

添加注册表到自动启动项、删除注册表。

涉及的API函数:

打开注册表:RegOpenKeyEx

设置注册表项:RegSetValueEx

删除指定值:RegDeleteValue

了解了这些,我们就可以动手开始编写代码了。

建立MFC项目,我这里叫WinStart。

布置界面,如下图一:

在WinStartDlg.h中添加函数声明void GetTimer(); //用来获取运行时间

在CPP文件中实现:

voidCWinStartDlg::GetTimer(){  CString s;  DWORDk=::GetTickCount();//获取毫秒级数目  inthm=k/3600000;//hm为小时数  intms=(k-3600000*hm)/60000;//ms为分钟数  intse=(k-3600000*hm-60000*ms)/1000;//se为秒数(除以1000是因为k精确到毫秒)     s.Format("%d:%d:%d",hm,ms,se);//输出时、分、秒   const char* ch = (LPCTSTR)s;  SetDlgItemText(IDC_EDIT1,ch);}
 

在初始化函数BOOL CWinStartDlg::OnInitDialog()中添加计时器:

 

this->SetTimer(0,1000,NULL);

 

然后用类向导建立消息响应函数OnTimer来响应SetTimer发出的WM_TIMER:

voidCWinStartDlg::OnTimer(UINTnIDEvent) {// TODO: Add your message handler code here and/or call default  GetTimer();  CDialog::OnTimer(nIDEvent);}



 

在OnCancel中KillTimer:

voidCWinStartDlg::OnCancel() {// TODO: Add extra cleanup here  this->KillTimer(0);   CDialog::OnCancel();}

这样,一个基本的程序就做好了。下面我们来导入注册表,设置它为开机启动。

首先我们来获取当前程序路径,放到“导入注册表”按钮中实现:

charpBuf[MAX_PATH];       //存放路径的变量GetCurrentDirectory(MAX_PATH,pBuf);    //获取程序的当前目录strcat(pBuf,"\\");strcat(pBuf,AfxGetApp()->m_pszExeName);   strcat(pBuf,".exe");

然后,开始注册表操作,首先在指定项下创建一个键值:

HKEY hKey;//添加注册表,并且打开RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&hKey);  //设置值  inttemp = RegSetValueEx(hKey,_T("WinStart"), 0,REG_SZ, _T((unsignedchar*)ch),strlen(ch) );if(temp == 0){   MessageBox(_T("导入注册表成功!"));   RegCloseKey(hKey);}else{   MessageBox(_T("导入失败!"));}

这样我们导入功能就实现了。接下来我们来完成“删除注册表”按钮:

void CWinStartDlg::OnButton2() {// TODO: Add your control notification handler code hereHKEY hKey;//打开注册表if(ERROR_SUCCESS !=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_SET_VALUE ,&hKey)){   MessageBox(_T("打开注册表失败,或不存在该项!"));}else{   if(!RegDeleteValue(hKey,"WinStart"))   {    MessageBox(_T("删除注册表成功!"));    RegCloseKey(hKey);   }   else   {    MessageBox(_T("删除失败!"));   }      }}

好了,我们的功能就这样基本实现了 ,赶快自己动手试试吧

欢迎拍砖~~~

原创粉丝点击