HanDs
NO.2

[Visual Studio文章] 自制开机小助手 





学习中请遵循国家相关法律法规,黑客不作恶。没有网络安全就没有国家安全

本站需要登陆后才能查看



每次开机看到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("删除失败!"));
   }
  
}
}
好了,我们的功能就这样基本实现了 ,赶快自己动手试试吧
欢迎拍砖~~~


学习中请遵守法律法规,本网站内容均来自于互联网,本网站不负担法律责任
自制 开机 助手
#1楼
发帖时间:2016-7-9   |   查看数:0   |   回复数:0
游客组