- void CSetDlg::OnBnClickedSetSet()
- {
- // TODO: 在此添加控件通知处理程序代码
- int RunOnStartFlag=0;
- RunOnStartFlag=m_RunOnStart.GetCheck();
- if (BST_CHECKED==RunOnStartFlag)
- {
- //设置开机启动
- //根键、子键名称、子键句柄
- HKEY hRoot=HKEY_LOCAL_MACHINE;
- char szSubKey[MAX_PATH]="Software//Microsoft//Windows//CurrentVersion//Run";
- HKEY hKey;
- //打开指定的子键
- //如果不存在,则不创建
- DWORD dwDisposition=REG_OPENED_EXISTING_KEY;
- LONG iRet=::RegCreateKeyEx(hRoot,szSubKey,0,NULL,
- REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,
- NULL,&hKey,&dwDisposition);
- //错误返回
- if (iRet!=ERROR_SUCCESS)
- {
- MessageBox("开机启动设置失败!");
- }
- //得到当前文件的路径+文件名
- char szFileName[MAX_PATH];
- ::GetModuleFileName(NULL,szFileName,MAX_PATH);
- //创建一个新的键值
- iRet=::RegSetValueEx(hKey,"CheckUpdate",0,REG_SZ,
- (byte*)szFileName,strlen(szFileName));
- //关闭子键句柄
- ::RegCloseKey(hKey);
- }
- if (BST_UNCHECKED==RunOnStartFlag)
- {
- //取消开机启动
- HKEY hRoot=HKEY_LOCAL_MACHINE;
- char szSubKey[MAX_PATH]="Software//Microsoft//Windows//CurrentVersion//Run";
- HKEY hKey;
- //打开指定的子键
- LONG iRet=::RegOpenKeyEx(hRoot,szSubKey,0,KEY_ALL_ACCESS,&hKey);
- if (iRet==ERROR_SUCCESS)
- {
- ::RegDeleteValue(hKey,"CheckUpdate");
- //关闭子键句柄
- ::RegCloseKey(hKey);
- }
- else
- {
- MessageBox("取消开机启动设置失败!");
- }
- }
- }
基本思路就是先创建一个注册表项,然后打开注册表,再进行写入,读取注册表也是类似的,先打开,然后读取,然后关闭键值。
而开机启动项目是放在注册表的"HKEY_LOCAL_MACHINE//Software//Microsoft//Windows//CurrentVersion//Run"这个项目下的,所以呢只要向这个地方写入自己的程序的名称以及路径,下次重新启动机器时,你会发现自己的程序开机启动了!
贴图:
自己写的一段代码,虽然不怎么好吧,但是这是自己第一次写注册表,没什么经验,欢迎拍砖哈!