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

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

基本思路就是先创建一个注册表项,然后打开注册表,再进行写入,读取注册表也是类似的,先打开,然后读取,然后关闭键值。

而开机启动项目是放在注册表的"HKEY_LOCAL_MACHINE//Software//Microsoft//Windows//CurrentVersion//Run"这个项目下的,所以呢只要向这个地方写入自己的程序的名称以及路径,下次重新启动机器时,你会发现自己的程序开机启动了!

贴图: 

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

在C++中,直接编开机启动程序并不常见,因为这通常是操作系统级别的任务,通常需要利用系统的注册表或者服务管理来进行设置。然而,在Windows系统下,可以借助一些第三方库,如CreateProcess函数配合批处理文件 (.bat 或 .cmd) 来创建一个可以在系统启动时运行的程序。 以下是一个简单的示例,说明如何通过C++创建一个批处理文件并在系统启动时运行: ```cpp #include <windows.h> // 定义一个全局变量来存储批处理路径 std::string batchFilePath = "C:\\YourPath\\your_script.bat"; void CreateStartupShortcut() { STARTUPINFO si = {0}; PROCESS_INFORMATION pi; // 初始化STARTUPINFO结构体 si.cb = sizeof(si); si.dwFlags |= STARTF_USESHOWWINDOW; // 设置窗口模式 // 创建命令行字符串 TCHAR commandLine[MAX_PATH]; _stprintf(commandLine, TEXT("CMD /c start %s"), batchFilePath.c_str()); // 打开进程 if (CreateProcess(NULL, // 父进程 commandLine, // 命令行参数 NULL, // 拒绝继承父进程的句柄集 NULL, // 不传递给新进程的句柄集 FALSE, // 不继承已打开的文件 0x00000008 | 0x00000010, // 创建新进程并显示窗口 NULL, // 使用默认的启动目录 NULL, // 启动信息文件名 &si, // 启动信息 &pi)) // 进程信息 { // 程序已经成功启动 CloseHandle(pi.hThread); // 关闭线程句柄 CloseHandle(pi.hProcess); // 关闭进程句柄 } else { // 创建失败,打印错误信息 DWORD dwError = GetLastError(); printf("Failed to create process with error code: %u\n", dwError); } } int main() { CreateStartupShortcut(); return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值