[C++]一个操作注册表使得程序开机(设置/取消)自启动的函数

引言:
今天专门写了一个用来设置注册表的函数
能够设置或者删除程序的注册表信息以达到开机自启动或者取消开机自启动的目的。

那么开始介绍:
函数原型如下:

int SetReg(
bool set,//设置(true)或取消(false)本程序的开机自启动
TCHAR *Value//写入注册表时的值的名称,如无特殊需要,单个程序中务必只使用一个名称作为值
);

返回值:
1表示成功操作
0表示失败操作
-1表示异常操作

异常原因分两种:
1.已经设置自启动却重复设置
2.不存在自启动却取消自启动

int SetReg(bool set,const TCHAR *Value) {//开机自启动设置
	HKEY hKey;//设置主根键
	TCHAR pFileName[MAX_PATH] = { 0 };//得到程序自身的全路径 
	DWORD dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH);
	LPCTSTR lpRun = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run";
	DWORD type = REG_SZ;
	//先以阅读模式打开注册表
	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_READ, &hKey) != ERROR_SUCCESS) {
		return 0;//阅读模式打开不成功
	}
	//然后检测Value中的值是否存在
	if ((RegQueryValueEx(hKey, Value, 0, &type, NULL, NULL) == ERROR_SUCCESS)) {//如果存在,则删除
		RegCloseKey(hKey);
		if (!set) {
			if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey) != ERROR_SUCCESS)
				return 0;//写入模式打开不成功
			if (RegDeleteValue(hKey, Value) != ERROR_SUCCESS)
				return 0;//删除不成功
			//删除名称为Value中的值的注册表信息
		}
		else
			return -1;//删除不存在的注册表项或者添加已经存在的注册表项
	}
	else if(set){//如果不存在并且是要设置
		RegCloseKey(hKey);
		if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey) != ERROR_SUCCESS) {
			return 0;//写入模式打开不成功
		}
		if (RegSetValueEx(hKey, Value, 0, REG_SZ, (BYTE *)pFileName, dwRet) != ERROR_SUCCESS)
			return 0;//写入不成功
		//将Value的值写入的注册表
	}
	else
		return -1;//删除不存在的注册表项或者添加已经存在的注册表项
	RegCloseKey(hKey);//关闭注册表
	return 1;//操作成功
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值