引言:
今天专门写了一个用来设置注册表的函数
能够设置或者删除程序的注册表信息以达到开机自启动或者取消开机自启动的目的。
那么开始介绍:
函数原型如下:
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;//操作成功
}