``当需要使某一程序在开机时就启动它,需要把它写进注册表的启动项中。
下面就展示一种简单的写法:
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>void ComputerStart(char *pathName)
{//找到系统的启动项 char *szSubKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";HKEY hKey;//打开注册表启动项 int k = RegOpenKeyExA(HKEY_CURRENT_USER, szSubKey, 0, KEY_ALL_ACCESS, &hKey);if (k == ERROR_SUCCESS){//添加一个子Key,并设置值,MyStart为启动项名称,自定义设置;RegSetValueEx(hKey, "MyStart", 0, REG_SZ, (BYTE *)pathName, strlen(pathName));//关闭注册表RegCloseKey(hKey);printf("设置成功\n");}else{printf("设置失败 error:%d\n", k);}
}int main()
{char pathName[MAX_PATH];//文件名字最大260个字符 MAX_PATH 260GetCurrentDirectory(MAX_PATH, pathName);//设置字符集为多字节字符集 获取当前文件路径sprintf(pathName, "%s\\", pathName);strcat(pathName, "1234.exe");//找到需要开机自启动的程序ComputerStart(pathName);system("pause");return 0;
}
将该程序放在你所需要开机自启的程序目录下,便可将你所需要的程序写进注册表。该程序具有可移植性,切勿恶搞他人电脑!!!
在某些情况下也会出现写入失败的问题,根据RegOpenKeyExA函数所返回的错误代码查询错误情况,一般都是注册表路径有误或者没有权限。在项目属相中选择配置属性->链接器->清单文件->UAC执行级别-> requireAdministrator (/level='requireAdministrator),如下图所示:
如何检查是否将某一程序写进了注册表呢?Win+R键,输入msconfig,在所出现的窗口中选顶端的启动栏,便可查看MyStart是否下进了注册表启动项。或者打开任务管理器,在启动栏中也可查看。
注册表是windows一个重要的数据库,一般情况下不要将某些程序放进注册表,不仅会增长开机时间,而且对某些恶意程序提供了可乘之机。