Chinaunix首页 | 论坛 | 博客
  • 博客访问: 523263
  • 博文数量: 576
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5020
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(576)

文章存档

2011年(1)

2008年(575)

我的朋友

分类:

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支持。

相关函数
    


本函数最新话题
函数搜索 |

--------------------next---------------------

阅读(223) | 评论(0) | 转发(0) |
0

上一篇:查看函数

下一篇:查看函数

给主人留下些什么吧!~~