Windows下通过写注册表的方式实现程序开机自启动

程序可以读取同目录下的config.ini文件中的配置来实现开机自启动。

config.ini文件地格式实例如下:

[Main]
KeyName = test
ProcessPath = D:\bin\test.exe


其中KeyName字段为写入注册表的表项名称(可以设置为程序名)

ProcessPath为程序的完整路径


程序的完整源代码如下。

regedit函数实现注册表写入,autopen实现开机自启动。

编译后的程序在此下载:程序下载

#include <stdio.h>
#include <windows.h>


int regedit(HKEY key, const char* reg_name, const char* key_name, const char* key_value)
{
	HKEY hkResult;  
	int ret=RegOpenKeyEx(key, reg_name, 0, KEY_ALL_ACCESS, &hkResult);

	if(ret != 0)
		return ret;

	ret=RegSetValueEx(hkResult, key_name, 0, REG_EXPAND_SZ, (CONST BYTE*)key_value, 25);

	if(ret==0)
	{  
		RegCloseKey(hkResult);
		return 0;
	}  
	else
	{  
		return ret;
	}
}

int autopen(const char* key_name, const char* process_path)
{
	char reg_name[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
	return regedit(HKEY_LOCAL_MACHINE, reg_name, key_name, process_path);
}

int main(void)  
{
	char key_name[100];
	char process_path[1000];

	GetPrivateProfileStringA("Main", "KeyName", "test", key_name,  sizeof(key_name), ".\\config.ini");
	GetPrivateProfileStringA("Main", "ProcessPath", "test", process_path,  sizeof(process_path), ".\\config.ini");
	
	int ret = autopen(key_name, process_path);
	if(ret == 0)
		printf("write to register succeed\n");
	else
		printf("write to register failed\n");

	system("pause");
	 
	return 0;  
} 



你可能感兴趣的:(C++,windows,源代码,注册表)