天天看点

写注册表设置开机启动的代码

[cpp] view plain copy print ?

  1. void CSetDlg::OnBnClickedSetSet()  
  2. {  
  3.     // TODO: 在此添加控件通知处理程序代码  
  4.     int RunOnStartFlag=0;  
  5.     RunOnStartFlag=m_RunOnStart.GetCheck();  
  6.     if (BST_CHECKED==RunOnStartFlag)  
  7.     {  
  8.         //设置开机启动  
  9.         //根键、子键名称、子键句柄  
  10.         HKEY hRoot=HKEY_LOCAL_MACHINE;  
  11.         char szSubKey[MAX_PATH]="Software//Microsoft//Windows//CurrentVersion//Run";  
  12.         HKEY hKey;  
  13.         //打开指定的子键  
  14.         //如果不存在,则不创建  
  15.         DWORD dwDisposition=REG_OPENED_EXISTING_KEY;  
  16.         LONG iRet=::RegCreateKeyEx(hRoot,szSubKey,0,NULL,  
  17.             REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,  
  18.             NULL,&hKey,&dwDisposition);  
  19.         //错误返回  
  20.         if (iRet!=ERROR_SUCCESS)  
  21.         {  
  22.             MessageBox("开机启动设置失败!");  
  23.         }  
  24.         //得到当前文件的路径+文件名  
  25.         char szFileName[MAX_PATH];  
  26.         ::GetModuleFileName(NULL,szFileName,MAX_PATH);  
  27.         //创建一个新的键值  
  28.         iRet=::RegSetValueEx(hKey,"CheckUpdate",0,REG_SZ,  
  29.             (byte*)szFileName,strlen(szFileName));  
  30.         //关闭子键句柄  
  31.         ::RegCloseKey(hKey);  
  32.     }  
  33.     if (BST_UNCHECKED==RunOnStartFlag)  
  34.     {  
  35.         //取消开机启动  
  36.         HKEY hRoot=HKEY_LOCAL_MACHINE;  
  37.         char szSubKey[MAX_PATH]="Software//Microsoft//Windows//CurrentVersion//Run";  
  38.         HKEY hKey;  
  39.         //打开指定的子键  
  40.         LONG iRet=::RegOpenKeyEx(hRoot,szSubKey,0,KEY_ALL_ACCESS,&hKey);  
  41.         if (iRet==ERROR_SUCCESS)  
  42.         {  
  43.             ::RegDeleteValue(hKey,"CheckUpdate");  
  44.             //关闭子键句柄  
  45.             ::RegCloseKey(hKey);  
  46.         }  
  47.         else  
  48.         {  
  49.             MessageBox("取消开机启动设置失败!");  
  50.         }  
  51.     }  
  52. }  

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"这个项目下的,所以呢只要向这个地方写入自己的程序的名称以及路径,下次重新启动机器时,你会发现自己的程序开机启动了!

贴图: 

写注册表设置开机启动的代码

自己写的一段代码,虽然不怎么好吧,但是这是自己第一次写注册表,没什么经验,欢迎拍砖哈!

继续阅读