C ++ 注册表编程 1.基础知识 注册表的组织方式跟文件目录比较相似,主要分为根键、子键和键值项三部分,与文件目录对应的话就是根目录、子目录和文件。分别介绍一下这三部分: (1)根键。分为5 个,分别为HKEY_CLASSES_ROOT, HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS 和 HKEY_CURRENT_CONFIG,把它们理解成磁盘的五个分区可以了。 (2)子键。可以有多个子键和键值项,就像一个目录中可以有多个子目录和多个文件一样。 (3)键值项。可以理解为文件,它由三部分组成,分别为 :名称、类型、数据。 类型又分为多种主要包括如下: REG_BINARY 二进制数据 REG_DWORD 32 位双字节数据 REG_SZ 以 0 结尾的字符串 REG_DWORD_BIG_ENDIAN 高位排在底位的双字 REG_EXPAND_SZ 扩展字符串,可以加入变量如%PATH% REG_LINK UNICODE 符号链接 REG_RESOURCE_LIST 设备驱动程序资源列表 REG_MULTI_SZ 多字符串 注册表数据项的数据类型有 8 种,但最常用的主要是前 3 种。 有了这些基础下面我们讨论如何编程实现对注册表的操作。 2.打开/关闭注册表句柄 在对注册表操作前应该先打开指定的键,然后通过键的句柄进行操作,打开键句柄可以用 API RegOpenKeyEx来实现,其原形如下: RegOpenKeyEx( hKey, //父键句柄 lpSubKey, //子键句柄 dwOptions, //系统保留,指定为0 samDesired, //打开权限 phkResult, //返回打开句柄 ); 其中打开权限有多种, 想方便的话可以指定为KEY_ALL_ACCESS ,这样什么权限都有了,当函数执行成功时返回 ERROR_SUCCESS。 其实例代码如下: HKEY key; LPCTSTR data="SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; if(RegOpenKeyEx(HKEY_LOCAL_MACHINE ,data ,0 ,KEY_ALL_ACCESS ,&key)==ERROR_SUCCESS) ...{ /**//*需要执行的操作...*/ } ::RegCloseKey(key); 要注意的是,在使用后应该调用RegCloseKey()函数关闭句柄. 3.获取子键/键值信息 在现实的编程操作中我们常常需要获取子键/键值的信息比如:子键/键值的数量,长度,以及数据的最大长度等等,这些信息可以通过RegQueryInfoKey 函数来获取。 它的原型如下: RegQueryInfoKey( hkey, //要获取信息的句柄 lpClass, //接受创建健时的Class 字符串 lpcbClass, //lpClass 的长度 lpReserved, //系统保留,指定为 0 lpcSubKeys, //子键数量 lpcbMaxSubKe...