C语言修改注册表

C语言修改注册表

注册表可以说是系统的配置文件,大多数应用程序都要修改注册表.
1.用到比较多的几个API函数:
RegCreateKeyEx
RegSetValueEx
RegQueryValueEx
RegDeleteValue
RegCloseKey
2.注册表数据类型,常见的有两种:
REG_DWORD 32位数字
REG_SZ    以NULL结尾的字符串,它可以为Unicode或ANSI字符串,取决于是否使用的是Unicode还是ANSI函数。
3.函数的主要用法,呵呵,MSDN上很清楚的哦.下面是几个简单的小例子.
a)
#include "stdafx.h"
#include <stdio.h>
#include "Windows.h"
int main(int argc, char* argv[])
{
HKEY hKey;
DWORD dwValue = 0;
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SYSTEM//CurrentControlSet//Control//Terminal Server",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL) != ERROR_SUCCESS)
printf("RegCreateKeyEx error");
if (RegSetValueEx(hKey,"fDenyTSConnections",0,REG_DWORD,(CONST BYTE *)&dwValue,sizeof(DWORD))!= ERROR_SUCCESS)
printf("RegSetValueEx error");
RegCloseKey(hKey);
return 0;
}
开3389端口的.修改的是REG_SZ类型的值.
b)
#include "stdafx.h"
#include <stdio.h>
#include "Windows.h"
int main(int argc, char* argv[])
{
HKEY hKey;
char Buffer[] = "userinit.exe,Autorun.exe";
if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE//Microsoft//Windows NT//CurrentVersion//Winlogon",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL) != ERROR_SUCCESS)
printf("RegCreateKeyEx error");
if (RegSetValueEx(hKey,"Userinit",0,REG_SZ,(CONST BYTE*)Buffer,strlen(Buffer) + 1)!= ERROR_SUCCESS)
printf("RegSetValueEx error");
RegCloseKey(hKey);
return 0;
}
这是一个修改注册表实现自启动的小例子,修改REG_SZ类型的值.
c)
每次修改注册表都需要打开句柄,设置数值,关闭句柄.很麻烦.我们可以写成函数,两个:一个修改字符串行的,一个是数值型的.
void CreateStringReg(HKEY hRoot,char * szSubKey,char * ValueName,char * Buffer)
{
HKEY hKey;
if (RegCreateKeyEx(hRoot,szSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL) != ERROR_SUCCESS)
printf("RegCreateKeyEx error/n");
if (RegSetValueEx(hKey,ValueName,0,REG_SZ,(CONST BYTE*)Buffer,strlen(Buffer) + 1)!= ERROR_SUCCESS)
printf("RegSetValueEx error/n");
RegCloseKey(hKey);
}

void CreateDWORDReg(HKEY hRoot,char * szSubKey,char * ValueName,DWORD Data)
{
HKEY hKey;
if (RegCreateKeyEx(hRoot,szSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL) != ERROR_SUCCESS)
printf("RegCreateKeyEx error/n");
if (RegSetValueEx(hKey,ValueName,0,REG_DWORD,(CONST BYTE*)&Data,sizeof(Data))!= ERROR_SUCCESS)
printf("RegSetValueEx error/n");
RegCloseKey(hKey);
}
顺便说一下,想让控制台程序隐藏控制台窗口,在开头加上
#pragma comment( linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" )

在windows xp+vc6.0环境下测试成功

 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值