分类:
2008-10-14 14:54:49
RegSetValueEx
函数状态: 正式函数 ,建设者:Deane ,最新更新时间: 2002-11-3 9:47:52
函数功能描述:给指定的注册标值设置数值和类型。
函数原型
LONG RegSetValueEx(
HKEY hKey, // 注册键句柄
LPCTSTR lpValueName, // 值名称
DWORD Reserved, // 保留
DWORD dwType, // 值类型
CONST BYTE *lpData, // 值的数据
DWORD cbData // 值的数据的大小
);
参数
hKey
[输入] 当前打开或者以下预定义的键。
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
Windows NT/2000/XP: HKEY_PERFORMANCE_DATA
Windows 95/98/Me: HKEY_DYN_DATA
lpValueName
[输入] 指针指向包含设置值的名称字符串。 如果这个值在先前的键中没有,过程将在键中创建该值。
如果 lpValueName 是 NULL 或是一个空字符串如 "",过程设置类型和数据为或
。
Windows 95/98/Me: 在 Windows 95 中, 键的默认类型总是 REG_SZ,所以 dwType 参数必须指定
REG_SZ 给。在 Windows 98/Me, 可以是任意类型。
Windows NT/2000/XP: 注册键不能有默认值,但可以有值,并且可以使任意类型。
Reserved
保留,必须设置为0
dwType
[输入] 指定一个代码指向 lpData 参数的指针类型。想获得注册表类型码,察看 Registry Value
Types。
lpData
[输入] 指向一块缓存,包含制定值名的数据。基于字符串的类型,像 REG_SZ, 字符串必须中断符结尾
的。REG_MULTI_SZ 数据类型,字符串必须是双中断符结尾。
cbData
[输入] 指针指向 lpData 参数指出缓存大小的信息,字节型。如果数据是 REG_SZ, REG_EXPAND_SZ,
或者 REG_MULTI_SZ, cbData 必须包含中断符的字符串。
返回值
如果过程执行成功,返回值是 ERROR_SUCCESS。
如果功能失败,返回一个非零值,错误码在 Winerror.h 定义。可以使用 FormatMessage 函数 和
FORMAT_MESSAGE_FROM_SYSTEM 标记获得一个分类的错误描述。
备注:
值得长度是受到有效内存限制的,长值(超过 2048 字节) 存储为文件形式,文件名存储在注册表中,这有助于改善注册标的性能。应用程序元素,像图标、位图和执行文件江存储为文件而不会放在注册标中。
通过 hKey 参数是别的的注册键必须通过 KEY_SET_VALUE 访问。打开一个键使用 RegCreateKeyEx 或RegOpenKeyEx 函数。
如果 dwType 是 REG_SZ, REG_MULTI_SZ, 或 REG_EXPAND_SZ 类型 并且使用的函数的 ANSI 版本。(调用的是RegSetValueExA 或者没有在 Windows.h 中定义 UNICODE , 数据指向 lpData 参数必须是一个 ANSI 字符串。 在存储注册标之前进行 Unicode 转换。
Windows 95/98/Me: 最大注册表值的大小是 16,300 字节,这个限制包括 cbData 和 lpValueName。
Windows 95/98/Me: 一个键值得总共大小限制为64K。
Windows 95/98/Me: RegSetValueExW 被 Microsoft Layer for Unicode所支持。
示例代码
//-- 转换基础键
HKEY GetBaseRegKey(char* keystr)
{
HKEY hKey;
if(strcmp(keystr,"HKEY_CLASSES_ROOT")==0)
hKey=HKEY_CLASSES_ROOT;
if(strcmp(keystr,"HKEY_CURRENT_CONFIG")==0)
hKey=HKEY_CURRENT_CONFIG;
if(strcmp(keystr,"HKEY_CURRENT_USER")==0)
hKey=HKEY_CURRENT_USER;
if(strcmp(keystr,"HKEY_LOCAL_MACHINE")==0)
hKey=HKEY_LOCAL_MACHINE;
if(strcmp(keystr,"HKEY_USERS")==0)
hKey=HKEY_USERS;
return hKey;
}
int RegSetKey()
{
HKEY bKey,hKey;
LONG retVal;
char szBuf[512];
char BaseKey[512];
char SubKey[512];
char SubKeyValueName[512];
char SubKeyValueData[512];
DWORD SubKeyValueType;
strcpy(BaseKey,"HKEY_CLASSES_ROOT");
strcpy(SubKey,"TEST");
strcpy(SubKeyValueName,"TestName");
strcpy(SubKeyValueData,"Success");
SubKeyValueType = REG_SZ;
bKey = GetBaseRegKey(BaseKey);
strcpy(szBuf,SubKeyValueData);
retVal = RegOpenKeyEx(bKey,SubKey,0,KEY_ALL_ACCESS,&hKey);
if(retVal!=ERROR_SUCCESS)
{
return 1;
}
retVal = RegSetValueEx(hKey,SubKeyValueName,NULL,SubKeyValueType,(LPBYTE)szBuf,(DWORD)strlen(szBuf) + 1); // 设置值和类型。
if(retVal != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return 2;
}
RegCloseKey(hKey);
return 0;
}
需求
Windows NT/2000/XP: 包含在 Windows NT 3.1 以后版本中。
Windows 95/98/Me: 包含在 Windows 95 以后版本中。
Header: 定义在 Winreg.h; 包含在 Windows.h.
Library: 使用 Advapi32.lib.
Unicode:Unicode 和 ANSI 版本在 Windows NT/2000/XP 中支持,也被 Microsoft Layer for Unicode支持。
相关函数
本函数最新话题