用C语言设置程序开机自启动

``当需要使某一程序在开机时就启动它,需要把它写进注册表的启动项中。
下面就展示一种简单的写法:

#include 
#include 
#include 

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  260
	GetCurrentDirectory(MAX_PATH, pathName);//设置字符集为多字节字符集  获取当前文件路径

	sprintf(pathName, "%s\\", pathName);
	strcat(pathName, "1234.exe");//找到需要开机自启动的程序

	ComputerStart(pathName);


	system("pause");
	return 0;
}

将该程序放在你所需要开机自启的程序目录下,便可将你所需要的程序写进注册表。该程序具有可移植性,切勿恶搞他人电脑!!!
在某些情况下也会出现写入失败的问题,根据RegOpenKeyExA函数所返回的错误代码查询错误情况,一般都是注册表路径有误或者没有权限。在项目属相中选择配置属性->链接器->清单文件->UAC执行级别-> requireAdministrator (/level='requireAdministrator),如下图所示:
用C语言设置程序开机自启动_第1张图片

如何检查是否将某一程序写进了注册表呢?Win+R键,输入msconfig,在所出现的窗口中选顶端的启动栏,便可查看MyStart是否下进了注册表启动项。或者打开任务管理器,在启动栏中也可查看。
注册表是windows一个重要的数据库,一般情况下不要将某些程序放进注册表,不仅会增长开机时间,而且对某些恶意程序提供了可乘之机。

你可能感兴趣的:(小项目)