写在前面:开机自启和关闭是注册表的操作
运行系统:win7(其他系统没有尝试,不知是否通用)
运行环境:VS2013
1.在**Dlg.h中声明
class **Dlg : public CDialogEx
{
...
...
...
public:
void SetAutoRun(BOOL bAutoRun);//开机自启
};
2.在**Dlg.cpp中自写函数SetAutoRun()
/*bAutoRun为true的话就会开机自启(在初始化函数中调用此函数),否者关闭开机自启(在OnCancel()函数中进行调用)*/
void **Dlg::SetAutoRun(BOOL bAutoRun)
{
HKEY hKey;
CString strRegPath = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");//找到系统的启动项
if (bAutoRun)
{
if (RegOpenKeyEx(HKEY_CURRENT_USER, strRegPath, 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) //打开启动项
{
TCHAR szModule[_MAX_PATH];
GetModuleFileName(NULL, szModule, _MAX_PATH);//得到本程序自身的全路径
RegSetValueEx(hKey, _T("Client"), 0, REG_SZ, (const BYTE*)(LPCSTR)szModule, strlen(szModule)); //添加一个子Key,并设置值,"Client"是应用程序名字(不加后缀.exe)
RegCloseKey(hKey); //关闭注册表
}
else
{
AfxMessageBox(_T("系统参数错误,不能随系统启动"));
}
}
else
{
if (RegOpenKeyEx(HKEY_CURRENT_USER, strRegPath, 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
{
RegDeleteValue(hKey, _T("Client"));
RegCloseKey(hKey);
}
}
}
3.在对话框的取消函数即:OnCancel() //这个是相应的系统函数
此函数作用为:取消开机自启功能
void CQQHideWndDlg::OnCancel()
{
// TODO: 在此添加专用代码和/或调用基类
SetAutoRun(false);//取消开机自启
CDialogEx::OnCancel();
}
4.在**Dlg.cpp中的初始化函数(即:OnInitDialog()函数)中进行开机自启的调用
此函数作用为:启动开机自启功能
BOOL CQQHideWndDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
...
...
...
SetAutoRun(TRUE);//设置开机自动启动
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
5.大功告成,开始验证开机自启和关闭功能
/*************************************************欢迎提出BUG*************************************************/