自制360开机小助手


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

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

  主要知识:

  1.获取系统运行时间

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

  2.计时器

  每秒刷新数据。

  涉及的API函数:SetTimer、KillTimer

  3.获取文件路径

  设置开机启动时使用

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

  4.注册表操作

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

  涉及的API函数:

  打开注册表:RegOpenKeyEx

  设置注册表项:RegSetValueEx

  删除指定值:RegDeleteValue

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

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

  布置界面,如下图一:

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

  在CPP文件中实现:

void CWinStartDlg::GetTimer() 
{ 
CString s; 
DWORD k=::GetTickCount(); //获取毫秒级数目 
int hm=k/3600000; //hm为小时数 
int ms=(k-3600000*hm)/60000; //ms为分钟数 
int se=(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:

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

  在OnCancel中KillTimer:

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

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

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

 char PBuf[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); 
 
//设置值 
 
int temp = RegSetValueEx(hKey,_T("WinStart"), 0,REG_SZ, 
  _T((unsigned char*)ch), strlen(ch) ); 
if(temp == 0) 
{ 
  MessageBox(_T("导入注册表成功!")); 
  RegCloseKey(hKey); 
} 
else 
{ 
  MessageBox(_T("导入失败!")); 
}

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

void CWinStartDlg::OnButton2() 
{ 
// TODO: Add your control notification handler code here 
HKEY 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("删除失败!")); 
  } 
  
} 
}

 转载自:http://dev.21tx.com/2010/12/09/11472.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值