通过简单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这个函数的写入。
以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这个函数的写入。
相关文章推荐
- 通过修改注册表实现Windows 隐藏账户
- WinPE系统设定如何修改(可通过修改PE注册表或配置文件来实现)
- 通过jna简单实现java后台监听键盘触发修改系统时间
- 通过修改注册表实现IE8固定显示微软雅黑字体
- Android编程简单实现ImageView点击时背景图修改的方法
- 注册表修改之后,是不会生效的,需要重启,或者执行如下操作(但是有些按这样操作也还是不能立即生效,最保险的方式还是通过重启电脑来实现)
- Discuz!教程之通过简单php文件实现修改主题发帖时间
- 通过修改注册表实现Windows 隐藏账户
- 通过使用脚本修改注册表实现非界面添加excel数据源
- 通过简单修改libjpeg源代码,实现内存内位图的压缩及解压缩 - [Linux]
- 通过简单修改libjpeg源代码,实现内存内位图的压缩及解压缩
- win8更改开始界面布局行数(通过修改注册表实现)
- 通过简单的C语言编程实现一个简易…
- installshield通过修改注册表实现windows环境变量且即时生效的方法
- kindeditor本身支持上传flash功能,但是我们经常需要上传一些flv、mp4或则其它格式的视频。 其实具体的播放功能是通过jwplayer实现的。我只对kindeditor简单的修改了一下
- Oracle DBLINK 简单使用 oracle在进行跨库访问时,可以通过创建dblink实现,今天就简单的介绍下如果创建dblink,以及通过dblink完成插入、修改、删除等操
- winxp下简单实现注册表修改、进程创建监控
- linux下通过利用qcreator实现简单界面编程
- 通过修改注册表实现程序以管理员身份运行
- Discuz!教程之通过简单php文件实现修改主题浏览量