首页 理论教育 使用VisualC++创建新键,简单易懂

使用VisualC++创建新键,简单易懂

时间:2023-11-16 理论教育 版权反馈
【摘要】:要创建一个新的子键,用户通过选择根键和输入子键,然后用户输入值项名和值串后,单击“创建子键”按钮,就可以创建一个新的子键。程序清单1-1CKeyEditor::OnCreateSubKey函数从程序清单1-1可以看出,创建一个新键要做很多工作。

使用VisualC++创建新键,简单易懂

要创建一个新的子键,用户通过选择根键和输入子键,然后用户输入值项名和值串后,单击“创建子键”按钮,就可以创建一个新的子键。为把该功能添加到程序中,需要给IDC_CREATE_SUBKEY的BN_CLICKED事件消息添加一个函数,把此函数命名为OnCreateSubKey。编辑此函数,添加的代码如程序清单1-1所示。

程序清单1-1 CKeyEditor::OnCreateSubKey函数

从程序清单1-1可以看出,创建一个新键要做很多工作。你也许认为只要输入父键路径名、新子键名和任何值就行了,其实不然。把注册表作为一种数据库来考虑,为安全起见,在对注册表进行操作之前,首先要打开所要操作的子键对应的父键,得到父键的句柄,并将其保留。有了父键句柄,就可以创建新的子键。如果不保留父键句柄,另一个应用程序如果为在同一个父键下创建一个新的子键,信息就可能对不上号或者使前面的操作无效。许多安装程序或应用程序可能直接从根键创建许多子键,此根键必须加以保留,防止其它的应用程序修改根键的子结构。

为了更好地理解程序清单1-1中有关对注册表进行的操作,下面就程序清单1-1中使用的注册表操作函数进行详细的说明。

1. RegOpenKeyEx函数

RegOpenKeyEx函数的作用是打开注册表中一个指定的键。当要对注册表进行访问时,必须要将所要访问的键打开后,才可以进行访问。RegOpenKeyEx的函数原型如下:

函数的参数:

(1)hKey:HKEY类型,对应一个已经打开键的句柄,或者是预定义的根键句柄。常用的根键句柄包括:

HKEY_CLASSES_ROOT,

HKEY_LOCAL_MACHINE,

HKEY_CURRENT_USER,

HKEY_USERS,

HKEY_ CURRENT_CONFIG。

根键句柄是Windows系统与定义的,可以直接使用。

(2)lpSubKey:字符串类型的指针,用来指定要打开的子键的名字,如果此参数为NULL或者是空串,函数就使用hKey的指定打开一个新句柄,原来的句柄不关闭。例如要打开:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\子键,则函数的各参数应这样设置:

(3)ulOptions:保留值,必须为0。

(4)samDesired:设置新打开键的访问方式,此参数可以是下面几个值的组合:

KEY_ALL_ACCESS,

KEY_CREATE_LINK,

KEY_CREATE_SUB_KEY,

KEY_ENUMERATE_SUB_KEYS,

KEY_EXECUTE,KEY_NOTIFY,

KEY_QUERY_VALUE,

KEY_READ,

KEY_SET_VALUE,

KEY_WRITE。

(5)phkResult:打开子键的返回句柄,当不再使用此句柄时,要用RegCloseKey函数关闭。

函数的返回值

如果函数执行成功,它的返回值是ERROR_SUCCESS;如果不成功,返回一个非0的错误码。关于错误码的具体含义可参见MSDN帮助及相关的书籍,在此不详细说明。

2. RegCreateKeyEx函数

RegCreateKeyEx函数的作用是在注册表中创建一个子键,如果子键创建成功就打开此子键。RegCreateKeyEx的函数原型如下:

函数的参数:

(1)hKey:已经打开的父键句柄,或者是预定义的根键句柄,详细的说明请见RegOpenKeyEx函数的参数说明。函数将在hKey句柄对应的键下建立子键。

(2)lpSubKey:字符串类型的指针,用来指定要建立的子键的名字。

(3)Reserved:保留值,必须为0。(www.xing528.com)

(4)lpClass:指向键的类别的字符串指针。如果键已经存在,则该参数被忽略。

(5)dwOptions:指定所创建的子键以何种方式存在的特殊选项。该参数的取值可以下列之一:

REG_OPTION_NON_VOLATILE(默认):表示新创建的子键不是易失的。信息保存在文件中,系统重启后可以使用。

REG_OPTION_VOLATILE:表示新创建的子键易失的。信息只存放在内存中。

REG_OPTION_BACKUP_RESTORE:表示创建子键后忽略访问掩码,试图为备份和恢复函数打开此键。

(6)samDesired:为所创建的子键指定访问权限,详细的说明参见RegOpenKeyEx函数。

(7)lpSecurityAttributes:SECURITY_ATTRIBUTES结构的指针,该参数决定返回的键句柄能否为子进程继承。

(8)phkResult:当子键创建成功,该参数存储所创建子键的返回句柄,当不再使用此句柄时,要用RegCloseKey函数关闭。

(9)lpdwDisposition:指向具有下列值之一的变量指针。

REG_CREATED_NEW_KEY:如果键不存在,则创建该键。

REG_OPENED_EXISTING_KEY:如果键已存在,则直接打开该键。函数的返回值:

如果函数执行成功,它的返回值是ERROR_SUCCESS;如果不成功,返回一个非0的错误码。关于错误码的具体含义参见MSDN帮助及相关的书籍,在此不详细说明。

函数说明:

应用程序可以使用RegCreatekeyEx函数一次创建几个键,比如程序要一次建立一个四层深的子键,lpSubKey参数可以指定为下面的形式:

subkey1\\subkey2\\subkey3\\subkey4

在注册表中没有的subkey1~subkey3键也同时建立。

3. RegSetValueEx函数

RegSetValueEx函数的作用是指定的子键下设置值项。RegSetValueEx的函数原型如下:

函数的参数:

(1)hKey:已经打开键的句柄,或者是预定义的根键:

HKEY_CLASSES_ROOT,

HKEY_LOCAL_MACHINE,

HKEY_CURRENT_USER,

HKEY_USERS,

HKEY_ CURRENT_CONFIG等。

(2)lpValueName:要设置的键值项的名字,是一个字符串类型指针。如果lpValueName为NULL或是空串,函数就取得当前指定键默认键值项的值及其类型。

(3)lpReserved:保留值,必须为0。

(4)lpType:要设置键值项数值的类型,此参数可以取下列值之一:REG_BINARY,REG_DWORD,REG_DWORD_LITTLE_ENDIAN,REG_DWORD_BIG_ENDIAN,REG_EXPAND_SZ,REG_LINK,REG_MULTI_SZ,REG_NONE,REG_RESOURCE_LIST,REG_SZ,具体说明参见表1-3。

(5)lpData:设置的数值所在的缓存区,如果不想设置数值,此参数可以设为NULL。

(6)lpcbData:指定lpData所设置数据的大小,以字节为单位。

返回值:

如果函数调用成功,它的返回值是ERROR_SUCCESS;如果不成功,返回一个非0的错误码。

使用此函数的具体例子:

RegSetValueEx(hKey, “RegisteredOwner”, NULL, type, value, size);

其中,value是要设置的键值。

在开发软件时有些信息需要保存在注册表中,这就需要在注册表中增加键值。

4. RegCloseKey函数

RegCloseKey函数的作用是关闭已打开的键。RegCloseKey的函数原型如下:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈