前言
本文为省略版直接贴代码,用就完事了
,下文三个方法都为独立模块可以单独调用,详细步骤版在这,点击跳转。
一、代码实现
#include <stdio.h>
#include <Windows.h>
// 删除注册表值,不存在则退出
void DeleteReg(HKEY RootKey,const char* SubKey,const char* Valuename){
HKEY hKey;//句柄
long ORet = RegOpenKeyEx(RootKey,SubKey,0,KEY_ALL_ACCESS,&hKey);
if (ORet != ERROR_SUCCESS){
printf("无效的路径:%s-%s\n",SubKey,Valuename);
return;
}else{
//long DReg = RegDeleteKey(RootKey,SubKey); //这个是直接删除子键(要求子键下面没有其他子键)
long DReg = RegDeleteValue(hKey,Valuename);
if (DReg == ERROR_SUCCESS){
printf("删除子键%s中的值%s\n",SubKey,Valuename);
printf("删除成功\n");
}
RegCloseKey(hKey);
getchar();
return;
}
}
// 创建/修改注册表值与数据
void CreateReg(HKEY RootKey,const char* SubKey,const char* Valuename,const char* Data)
{
HKEY hKey;//句柄
//创建值
long CReg = RegCreateKeyEx(RootKey,SubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL);
if (CReg == ERROR_SUCCESS)
{
//设置值的数据
printf("设置值与数据为(值:数据):\n%s:%s\n", Valuename,Data);
long SRet = RegSetValueEx(hKey,Valuename, 0, REG_SZ, (BYTE*)Data, strlen(Data));
if (SRet == ERROR_SUCCESS)
{
printf("设置成功!\n");
}
}
RegCloseKey(hKey);
getchar();
return;
}
//查询子健的值的数据
void QueryReg(HKEY RootKey,const char* SubKey,const char* Valuename){
HKEY hKey;//句柄
DWORD size=ULONG_MAX; //数据缓存大小
char buf[UCHAR_MAX]; //用于接收查询到的值的变量
long ORet = RegOpenKeyEx(RootKey,SubKey,0,KEY_ALL_ACCESS,&hKey);
if (ORet != ERROR_SUCCESS){
printf("无效的路径:%s-%s\n",SubKey,Valuename);
return;
}else{
long QRet = RegQueryValueEx(hKey,Valuename,0,NULL,(BYTE*)buf, &size);
printf("查询结果(值:数据):\n%s:%s\n",Valuename,buf);
RegCloseKey(hKey);
getchar();
return;
}
}
int main(int argc,char *argv[])
{
//创建或修改值与数据
//CreateReg(根键,子键,值,数据);
CreateReg(HKEY_CURRENT_USER,"SOFTWARE\\1demo\\cs","vlauename","data");
//查询值的数据
//QueryReg(根键,子键,值);
QueryReg(HKEY_CURRENT_USER,"SOFTWARE\\1demo\\cs","vlauename");
//删除值
//DeleteReg(根键,子键,值);
DeleteReg(HKEY_CURRENT_USER,"SOFTWARE\\1demo\\cs","vlauename");
return 0;
}
二、实现效果
①注册表初始状态
②执行CreateReg方法创建
③执行QueryReg方法查询
④执行DeleteReg方法删除
文章参考
本文旨在用C实现简单的注册表操作,并作为模板方便改写使用,本人学识浅薄,第一次做博客,理解的不够深入,代码比较粗糙,还请见谅。
END 😃