注册表的应用与事例(下)
文/董毅
上篇我们说到数据类型。在注册表内只用到了这三种数据类型,还有其他的类型,但是不常用在这里我就不介绍啦。当使用到RegSetValue()来创建键的时候,VC会提供一些数据类型以及这些数据的数据指针,便于对键值的操作,而用户的程序可以保存二进制的任意类型,比如:结构类型,32值以及字符串等等。有一点需要注意,在编写WIN3.X程序时,注册表只支持REG——SZ类型的数据,这是在编程当中要注意的。
在对数据类型有一定的了解以后,我们来看看如何对键值的管理。我们上篇已经讲过如何建键,如何打开一个已知的键以及如何删除他。而对键的操作要与我们上面讲到的数据类型来结合,你才能理解,下面函数的原型。
4.RegQueryValueEx()
原型:LONG RegQueryValueEx(
HKEY hKey;
LPTSTR lpValuename;
LPDWORD lpReserved;
LPDWORD lpType;
LPBYTE lpData;
LPDWORD lpcbData;
)
解释:返回指示注册表键的数据以及类型
例子:DWORD dwSize = (DWORD) nSize;
BOOL bRet = (::RegQueryValueEx( m_hKey, lpszValueName, NULL, NULL, (unsigned char *) lpReturnBuffer, &dwSize ) == ERROR_SUCCESS );
m_dwLastError = GetLastError();
现在我们说到的这些函数都是对注册表进行管理的,而这个函数以及下面的函数在操作时候,是通过所需注册表的句柄来实现的。注册表的句柄由调用RegOpenKeyEx()和RegCreateKeyEx()函数得到的。而这个函数是用来读取注册表的一个已知的键值的。用这个函数可以得到所需键值的名称,并且返回一个数据,数据长度和数据类型。但是在这之前必须先获得这个注册表的句柄,句柄是通过RegOpenKeyEx()与RegCreateEx()函数来获得,当需要设置和修改时,用户调用这个函数。但是有一点要注意的是,为了使该函数可以访问,必须使用KEY_SET_VALUE权限来打开键。(这个权限是在RegCreateEx()或RegOpenKeyEx()函数内设置的)
5.RegOpenKeyEx()
原型:WINADVAPI LONG APIENTRY RegOpenaKeyEx(HKEY hKey,
LPCTSTR lpSubKey,
DWORD ulOptions,
REGSAM samDesired,
PHKEY phkResult);
解释:打开指定的键或子键。返回的句柄用于进一步的访问。应使用RegCloseKey()关闭每个打开的键。
例子:HKEY hKey;
const char *lpszSubKey
::RegOpenKeyEx( hKey,
lpszSubKey,
0,
KEY_ALL_ACCESS,
&m_hKey )
这个函数没有什么好讲的。他的意思和他的名字一样好理解。就是打开一个给定正确路径的键或子键。我对这个函数简单的解释一下。hKey 在这里是根键的意思比如:HKE_CLASSES_ROOT,lpSubKey是指子键的名称,ulOptions是指定值,通常被定义为0,samDesired是指访问类型,不同的访问类型有不同的操作效果。PhkResult是指通过RegOpenKeyEx()函数来的到注册表的句柄,在通过句柄来进行操作。
总结:
对于注册表还有很多的东西要讲,但是主要用的是这些。大家在平时用到注册表的时候,希望多看看别人的例子。我在这里只说了5个函数其他函数,虽然没有讲不代表不重要在不久我还会为朋友们介绍些此类函数。大家也可以自己做一个自己喜欢的类,来完成更复杂的工作,总而言之希望大家多提宝贵意见。