VS2013/MFC基于对话框编程:[16]开机自启动
1、打开一个已经创建好的项目,我以上篇经验中写到的项目为基础,在对话框上添加一个复选框。功能:选中复选框则软件会自启动,否则取消自启动。
![VS2013/MFC基于对话框编程:[16]开机自启动](https://exp-picture.cdn.bcebos.com/40d2d0e8b004541b86c36595869a310e1699a663.jpg)
2、修改复选框ID为IDC_AutoStart,添加变量CButton m_autoStart;双击复选框自动生成函数OnBnClickedAutostart。
![VS2013/MFC基于对话框编程:[16]开机自启动](https://exp-picture.cdn.bcebos.com/0cdb2f0e1799e92ae774d5f3e1fec314f0c5a063.jpg)
3、编辑函数OnBnClickedAutostart以实现自启动或取消自启动;这个功能需要修改注册表:1、定义注册表项HKEY heky;2、通过RegOpenKe烤恤鹇灭yEx函数打开电脑的启动项;3、通过GetModuleFileName函数获取本软件的全路径;4、通过RegSetValueEx函数添加注册表项;取消自启动:1、通过RegOpenKeyEx函数打开电脑的启动项;2、通过RegDeleteValue函数删除注册表项;
![VS2013/MFC基于对话框编程:[16]开机自启动](https://exp-picture.cdn.bcebos.com/6a408cdd3340b6f31e4b94af12c0affce086ee63.jpg)
4、程序代码:void CDemoDlg::OnBnClickedAutostart(){ // TODO: 在此添加控件通知处理程序代码 HKEY hKey; CString strRegPat茑霁酌绡h = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"); //找到系统的启动项 if (m_autoStart.GetCheck()) { 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("Demo"), 0, REG_SZ, (LPBYTE)szModule, (lstrlen(szModule) + 1)*sizeof(TCHAR)); //添加一个子Key,并设置值,"Demo"是应用程序名字(不加后缀.exe) RegCloseKey(hKey); //关闭注册表 } else { AfxMessageBox(_T("系统参数错误,不能随系统启动")); } } else { if (RegOpenKeyEx(HKEY_CURRENT_USER, strRegPath, 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) { RegDeleteValue(hKey, _T("Demo")); RegCloseKey(hKey); } }}测试程序,启动调试。
![VS2013/MFC基于对话框编程:[16]开机自启动](https://exp-picture.cdn.bcebos.com/91091efc77f7980e31ecd4c2d4db3620b83a9163.jpg)
5、勾选“自启动”复选框,此时如果电脑带有360安全卫士的话,会弹框提示有用户在修改启动项。这里只要选择信任就行,同时说明了自启动功能已经成功加入到程序中,以后需要删除的时候只需去掉复选框选中状态即可。怎么样,是不是立马感觉自启动也不是什么了不起的功能。
![VS2013/MFC基于对话框编程:[16]开机自启动](https://exp-picture.cdn.bcebos.com/ccc83ec5260f8835aa46ce6dce07880139708663.jpg)
6、win+R运行regedit打开注册表,查看注册表:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run可以看到新添加的注册表项项
![VS2013/MFC基于对话框编程:[16]开机自启动](https://exp-picture.cdn.bcebos.com/256eb672941fbee4ac1667edc1237971ff1de763.jpg)