注册表操作
注册表的基础知识
Windows 的注册表包含了Windows的系统配置、PC机的硬件配置、Win32应用程序和用户的其他设置信息。
注册表和ini文件不同,它是多层次的树状结构,具有六个分支(根键),每个分支又由许多的键和键值组成,而每个键则代表一个特定的配置项目。
常用注册表Windows API函数如表1所示。
表 1  常用注册表函数
函数
描述
RegCreateKey
新建主键
enum函数RegCreateKeyEx
创建或打开主键
RegOpenKey
打开主键,此函数是为了兼容Windows3.1
RegOpenKeyEx
打开主键
RegQueryInfoKey
取主键信息
RegQueryValue
取主键的值,此函数是为了兼容Windows3.1
RegQueryValueEx
取主键的值
RegQueryMultipleValues
取多条键值
函数
描述
RegDeleteKey
删除主键
RegDeleteValue
删除键值
RegEnumKey
取所有子键,此函数是为了兼容Windows3.1
RegEnumKeyEx
取所有子键
RegEnumValue
取所有键值
RegCloseKey
关闭有RegCreateKeyEx生成的句柄
注册表的访问和修改
注册表的打开
在读写注册表前,必须先将目标的子键打开,也就是取得一个操作的句柄,最常用的是使用RegCreateKeyEx函数,它用于创建一个键,其函数原型:
LONG RegCreateKeyEx(
            HKEY    hKey,                //父键的句柄
            LPCTSTR    lpSubKey,        //欲创建的子键的名称
            DWORD    Reserved,        //保留,一般为0
        LPTSTR    lpClass,            //欲创建的子键的类型,一般为0
        DWORD    dwOptions,        //创建子键是的选项
        REGSAM    samDesired,        //打开方式
        LPSECURITY_ATTRIBUTES    lpSecurityAttributes,    //指定继承性
        PHKEY        phkResult,        //用于返回子键的句柄
        LPDWORD    lPdwDisposition    //打开还是创建子键的信息
);
如果函数调用成功,会返回ERROR_SUCCESS也就是说成功返回0,失败返回非0值。samDesired参数有多个取值,最后这个lpdwDisposition参数用于返回信息,有两个取值:
REG_CREATED_NEW_KEY:指定的键不存在,那么创建。
REG_OPENED_EXISTING_KEY:指定的键存在,那么打开。
另外还有相近的函数RegOpenKeyEx,它用于打开一个键,其函数原型:
LONG RegOpenKeyEx(
            HKEY    hKey,                //要打开的主键句柄
        LPCTSTR    lpSubKey,        //要打开的子键
        DWORD    ulOptions,        //保留
        REGSAM    samDesired,        //安全存取参数
        PHKEY        phkResult,        //打开键句柄的地址
);
注册表的修改
1. 读取键值
使用RegQueryValueEx读取子键的值,RegEnumKey获取所有子键:
LONG RegQueryValueEx(
            HKEY    hKey,                //子键句柄
        LPCTSTR    lpValueName,    //键值名称
        LPDWORD    lpReserved,        //0
        LPDWORD    lpType,            //返回键值的数据类型
        LPBYTE    lpData,            //返回键值的数据
        LPDWORD    lpcbData        //缓冲区的大小
);
函数调用成功后,返回ERROR_SUCCESS。
2. 设置键值
使用RegSetValueEx设置子键值:
LONG RegSetyValueEx(
            HKEY    hKey,                //键值所在子键的句柄
        LPCTSTR    lpValueName,    //要设置的键值名称
        DWORD    Reserved,        //0
        DWORD    dwType,            //设置键值的数据类型
        const BYTE*    lpData,        //设置键值的数据缓冲区
        DWORD    cbData        //设置键值的数据缓冲区大小
);
3. 删除某个键
使用RegDeleteKey删除某个键:
LONG RegDelete(
            HKEY    hKey,                //子键的句柄
        LPCTSTR    lpValueName,    //删除键值的名称
);
注册表的关闭
使用RegCloseKey关闭某个键,其函数原型如下:
LONG RegCloseKey(HKEY    hKey);    //只需要传入一个要关闭的句柄就行了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。