• 1160阅读
  • 2回复

写入注册表实现自启动 [复制链接]

上一主题 下一主题
离线啊冲
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2016-02-16



[cpp] view plain copy

  1. void XXXX::OnBnClickedAutorunCheckbtn()  
  2. {  
  3.     //-----------------------------------------------  
  4.     // 通过HKEY_LOCAL_MACHINE//Software//Microsoft//Windows//CurrentVersion//Run  
  5.     // 加入一个自定义键值,并设置数据为当前exe执行路径即可实现开机自动运行  
  6.     // 清空键值,就可以去掉开机运行,当然也可以删除这个值.  
  7.     //  
  8.     // LONG RegOpenKeyEx(HKEY hKey, // 需要打开的主键的名称   
  9.     //                  LPCTSTR lpSubKey, //需要打开的子键的名称   
  10.     //                  DWORD ulOptions, // 保留,设为0  
  11.     //                  REGSAM samDesired, // 安全访问标记,也就是权限   
  12.     //                  PHKEY phkResult // 得到的将要打开键的句柄  
  13.     //                    )  
  14.     // RegSetValueEx:设置一个键值的数据,如果没有这个键值,就创建它.  
  15.     //-----------------------------------------------  
  16.       
  17.     // 得到exe执行路径.  
  18.     TCHAR tcExePath[MAX_PATH] = {0};  
  19.     ::GetModuleFileName(NULL, tcExePath, MAX_PATH);  
  20.   
  21.     // 设置自定义键值名称.  
  22. #ifndef AUTORUN_APP_NAME  
  23. #define AUTORUN_APP_NAME        (TEXT("hgy test autorun"))  
  24. #else  
  25. #endif  
  26.   
  27.     LPCTSTR lpSubKey = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run");  
  28.     HKEY hKey;  
  29.     if (m_AutoRun.GetCheck())  
  30.     {  
  31.        if (ERROR_SUCCESS  
  32.            == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_WRITE, &hKey))  
  33.        {  
  34.            //加入一个自定义键值,并设置数据,  
  35.            if (ERROR_SUCCESS ==  ::RegSetValueEx(hKey, AUTORUN_APP_NAME, 0, REG_SZ, (BYTE*)tcExePath, MAX_PATH))  
  36.            {  
  37.            }  
  38.            else  
  39.            {  
  40.                AfxMessageBox(TEXT("设置失败"));  
  41.            }  
  42.   
  43.            ::RegCloseKey(hKey);  
  44.        }  
  45.     }  
  46.     else  
  47.     {  
  48. #if 1   // 删除值,没有就失败,方法二选一  
  49.         if (ERROR_SUCCESS  
  50.             == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_SET_VALUE, &hKey))  
  51.         {  
  52.            ::RegDeleteValue(hKey, AUTORUN_APP_NAME);  
  53.         }  
  54. #endif  
  55.   
  56. #if  0  
  57.         // 清空数据  
  58.         ::ZeroMemory(tcExePath, MAX_PATH);  
  59.   
  60.         if (ERROR_SUCCESS  
  61.             == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_WRITE, &hKey))  
  62.         {  
  63.             //加入一个自定义键值,并设置数据  
  64.             if (ERROR_SUCCESS ==  ::RegSetValueEx(hKey, AUTORUN_APP_NAME, 0, REG_SZ, (BYTE*)tcExePath, MAX_PATH))  
  65.             {  
  66.             }  
  67.             else  
  68.             {  
  69.                 AfxMessageBox(TEXT("删除失败"));  
  70.             }  
  71.   
  72.             ::RegCloseKey(hKey);  
  73.         }  
  74. #endif  
  75.     }  
  76. }  

m_AutoRun为checkbox,这是它的响应函数.
善者 慈悲心常在 无怨无恨 以苦为乐
默认压缩密码www.hifyl.com
文件分享密码问题:http://www.hifyl.com/read-htm-tid-4444.html
离线im86165507

只看该作者 沙发  发表于: 2016-02-16
离线v2680267313

只看该作者 板凳  发表于: 2016-04-30
用户被禁言,该主题自动屏蔽!
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个