您的位置:首页 > 编程语言

通过简单C编程实现注册表修改

2015-01-23 21:00 232 查看
把事情做到最简单,做到最多人能接受,才是最好的,鉴于最多的人学的是C,所以全部用C写一下对注册表的枚举,更改,删除的操作。

以HKEY_LOCAL_MACHINE\Software\Miscrosoft\Windows\CurrentVision\Run\为例,即实现对开机启动项的枚举和修改

#define REG_RUN "Software\\Miscrosoft\\Windows\\CurrentVision\\Run"
//方便以后写先把要打开的键在这儿宏定义,你要改成修改其他的键,直接改这儿就行了

#include

#include

int main(int argc,char *argv[])

{

DWORD dwType=0;

DWORD
dwBufferSize=MAXBYTE;

DWORD
dwKeySize=MAXBYTE;
//这几个东西,直接翻译它的英文意思就懂了是干嘛的了,它们前面的dw表示是dword型数据,占4个字节就和long
int 一个样,后面的MAXBYTE在windows.h这个库里定义了,你可以在VC里它选中,然后单击右键选择"Go
To定义",VC就会自动打开winbase.h这个页面,然后你就可以在这里看到它对应的值,自己看吧,我就不说了多多动手,这个Winbase.h里面还有很多好东西哦。

char szValueName[MAXBYTE]= {0};

char
szValueKey[MAXBYTE]={0}; //定义两个char型数组用于保存要枚举的键名和键值

HKEY hKey=NULL;
//定义注册表句柄,不管它这些都是windows相关的东西,只要记主,要打开窗口就要定义一个窗口句柄
HWND,要打开进程就要定义一个 HPROCESS....都是h开头。

LONG lRet
=RegOpenKey(HKEY_LOCAL_MACHINE,REG_RUN,&hKey) //用RegOpenKey函数打开你要修改的的键保存到hKey句柄,该函数返回一个LONG类型的数据,用以判断是否打开成功。

if(lRet!=ERROR_SUCCES) //如果没打开成功,则退出

{

return;

}

int i=0;

While(0) //进入枚举循环

{

lRet=RegEnumValue(hKey,i,szValueName,&dwBufferSize,NULL,&dwType,(unsigned
char *)szValueKey,&dwKeySize);
//按循序用RegEnumValue函数枚举该键下的键名保存到szValueName下,键值保存到szValueKey下,该函数同样返回一个判断性的LONG.

if(
lRet==ERROR_NO_MORE_ITEMS) //判断枚举是否结束,结束则退出循环

{

break;

}

printf("%d
键名为:
%s

键值为:
%s \r\n"
,i,szValueName,szValueKey);

i++;

ZeroMemory(szValueName,MAXBYTE);

ZeroMemory(szValueKey,MAXBYTE);
//清除szValueName里的数据方便下次读入

}

//下面是实现添加键,以添加REG_SZ类型键为例,其他类型也一样,只是把类型改一下,把前面的char型数组改一下

printf("请输入您要填加的键名");

scanf("%s",szValueName);

printf("请输入键值");

scanf("%s",szValueKey);

RegSetValueEX(hKey,szValueName,NULL,REG_SZ,(const unsigned
char*)szValueKey,strlen(KeyValue)+sizeof(char));
//添加你输入的键值和键名;

.....//你可以在这儿加入代码让它再枚举一下,看是否加入成功了;

//删除刚刚加入的键

RegDeleteValue(hKey,szKeyName);

RegCloseKey(hKey) //打开的东西一定要记得关,养成好习惯

}

注:要实验的话,最好关闭杀软,杀软会有提示,然后阻止你的RegSetValueEx这个函数的写入。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐