注册表操作

来源:互联网 发布:儿童牙刷推荐 知乎 编辑:程序博客网 时间:2024/06/03 23:03

一、使用API函数操作注册表

1.RegCreateKey


该函数用于打开指定的键,如果键不存在,则新建一个键或子键
LONG RegCreatekey(HKEY hKey,LPCTSTR lpSubKey,PHKEY phkResult);
hKey:打开键的句柄
lpSubKey:函数打开或创建的键名
phkResult:函数返回的打开或创建键的句柄指针


2.RegCloseKey


该函数用于关闭注册表中的键
LONG RegCloseKey(HKEY hkey);


3.RegCreateKeyEx


该函数用于创建或打开注册表中的键
LONG RegCreateKeyEx(HKEY hkey,LPCTSTR lpSubkey,DWORD Reserved,LPTSTR lpClass,DWORD dwOptions,
REGSAM samDesired,LPSECURITY_ATTRIBUTES lpSecuritySttributes,PHKEY phkResult,LPDWORD lpdwDisposition );
hKey:父键句柄
lpSubKey:函数打开或创建的键名
Reserved:保留的
lpClass:键的类型
dwOptions:键的打开方式,REG_OPTION_BACKUP_RESTORE,表示以备份或还原的方式打开键;
REG_OPTION_NON_VOLATILE,表示键信息在系统重启后保存到文件中,这是默认的设置。
REG_OPTION_VOLATILE,表示键信息保存在内存中,当系统关闭后这些信息将不被保存
SamDesired:访问权限,如果为KEY_ALL_ACCESS,表示具有所有的访问权限
lpSecurityAttributes:安全属性信息,即子进程能否继承父进程中的该句柄
phkResult:函数打开或创建的键句柄
lpdwDisposition:用于返回函数执行的动作。如果为REG_CREATED_NEW_KEY,表示键不存在,函数将
创建键信息:为REG_OPENED_EXISTING_KEY,表示键已存在,函数指示打开键


4.RegDeleteKey


该函数用于从注册表中删除某个子键
LONG RegDeleteKey(HKEY hkey,LPCWSTR lpSubKey);
hKey:当前打开的父键句柄
lpSubKey:将要删除的子键名称


5.RegOpenKey


该函数用于打开注册表中所标识的键
LONG RegOpenKey(HKEY hkey,LPCTSTR lpSubKey,PHKEY phkResult);
hKey:当前打开的父键句柄
lpSubKey:将要打开的子键名称
phkResult:用于返回打开的子键句柄


6.RegOpenKeyEx


该函数用于打开注册表中所标识的键
LONG RegOpenKeyEx(HKEY hkey,LPCWSTR lpSubKey,DWORD uiOptions,REGSAM samDesired,HKKEY phkResult);
hKey:当前打开的父键句柄
lpSubKey:将要打开的子键名称
ulOptions:保留,必须为0
samdesired:未使用,必须为0
phkResult:用于返回打开的子键句柄


7.RegDeleteValue


该函数用于从注册表中移除指定键下的项
LONG RegDeleteValue(HKEY hkey,LPCWSTR lpValueName);
hKey:当前打开的键句柄
lpValueName:将要删除的项名称


8.RegQueryValue


该函数用于获取注册表中指定键下的默认值
LONG RegQueryValue(HKEY hkey,LPCTSTR lpSubkey,LPTSTR lpValue,PLONG lpcbValue);
hKey:当前打开的键句柄
lpSubKey:子键名称
lpValue:返回的数据
lpcbValue:标识lpValue缓冲区的大小


9.RegQueryValueEx


该函数用于获取注册表中指定键下某个项的值
LONG RegQueryValueEx(HKEY hkey,LPCWSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcdData);
hKey:当前打开的键句柄
lpValueName:项名称
lpReserved:保留,必须为NULL
lpTYPE:一个指针,用于接收项的数据类型
lpData:一个数据缓冲区,用于存储函数返回的数据
lpcdData:lpData数据缓冲区的大小


10.RegSetValue


该函数用于设置关联键的默认值
LONG RegSetValue(HKEY hkey,LPCTSTR lpSubKey,DWORD dwType,LPCTSTR lpData,DWORD cbData);
hKey:打开的父键句柄
lpSubKey:子键名称、
dwType:数据的存储类型
lpData:待设置的数据
cbData:lpData缓冲区的大小

11.RegSetValueEx


该函数用于设置指定键下的项信息
LONG RegSetValueEx(HKEY hkey,LPCWSTR lpValueName,DWORD Reserved,DWORD dwType,const BYTE* lpData,DWORD cvData);
hKey:打开的键句柄
lpValueName:项名称
Reserved:保留,必须为0
dwType:项的数据类型
lpData:待设置的数据
cbData:lpData缓冲区的大小

写入注册表
::OnOK(){ HKEY hroot;//定义注册表类型 DWORD action;//定义一个整型变量 CString keyname;//定义一个字符串变量 m_KeyName.GetWindowText(keyname);//获取键名 keyname+="\\";//设置键名//创建键名RegCreateKeyEx(HKEY_CURRENT_USER,keyname,0,NULL,0,KEY_WRITE,NULL,&hroot,&action);CString itemname;//定义字符串变量m_ItemName.GetWindowText(itemname);//获取项名CString itemvalue;//定义字符串变量m_ItemValue.GetWindowText(itemvalue);//获取项值DWORD size=itemvalue.GetLength();//获取字符串长度//设置项值if(ERROR_SUCCESS==RegSetValueEx(hroot,itemname,0,REG_SZ,(unsigned char*)itemvalue.GetBuffer(0),size))MessageBox("Successful");RegCloseKey(hroot);//关闭键句柄//当RegSetValueEx函数的返回值为ERROR_SUCCESS时,表示设置成功


读取
::OnRead(){HKEY hroot;//定义键句柄CString keyname;//定义字符串m_KeyName.GetWindowText(keyname);//获取键名RegOpenKeyEx(HKEY_CURRENT_USER,keyname,0,KEY_READ,&hroot);//打开注册表键值CString itemname;//定义字符串变量m_ItemName.GetWindowText(itemname);//获取项名称DWORD type=REG_SZ;//设置项的数据类型CString data="temp";//定义一个字符串变量DWORD size=MAX_PATH;//设置字符串代码//从注册表中获取项信息RegQueryValueEx(hroot,itemname,0,&type,(unsigned char*)data,GetBuffer(0),&size);RegCloseKey(broot);//关闭键句柄MessageBox(data,"提示");//以对话框形式显示数据}



基于CRegKey类操作注册表


在使用CRegKey类时,需要引用头文件atlbase.h

1.create


该方法用于创建所标识的键
LONG Create(HKEY hKeyParent,LPCTSTR lpszKeyName,LPTSTR lpszClass=REG_NONE,DWORD dwOptions=REG_OPTION_NON_VOLATILE,REGSAM samDesired=KEY_ALL_ACCESS,LPSECURITY_ATTRIBUTES lpSecAttr=NULL,LPDWORD lpdwDisposition=NULL);
hKeyParent:打开的父键句柄
lpszkeyName:键名称
lpszClass:键的类型
dwOptions:键的打开方式,REG_OPTION_BACKUP_RESTORE,表示以备份或还原的方式打开键;
REG_OPTION_NON_VOLATILE,表示键信息在系统重启后保存到文件中,这是默认的设置。
REG_OPTION_VOLATILE,表示键信息保存在内存中,当系统关闭后这些信息将不被保存
SamDesired:访问权限,如果为KEY_ALL_ACCESS,表示具有所有的访问权限
lpSecAttr:键句柄的安全属性
lpdwDisposition:用于返回函数执行的动作。如果为REG_CREATED_NEW_KEY,表示键不存在,函数将
创建键信息:为REG_OPENED_EXISTING_KEY,表示键已存在,函数指示打开键


2,open


该方法用于打开注册表键值
LONG Open(HKEY hkeyParent,LPCTSTR lpszKeyName,REGSAM samDesired=KEY_ALL_ACCESS);
hKeyParent:打开的父键句柄
lpszKeyName:将要打开的键名称
samDesire:键的访问权限


3.SetValue


该方法用于设置指定键下的项信息
LONG SetValue(DWORD dwValue,LPCTSTR lpszValueName);
LONG SetValue(LPCTSTR lpszValue,LPCTSTR lpszValueName=NULL);
LONG SetValue(HKEY hKeyParent,LPCTSTR lpszKeyName,LPCTSTR lpszValue,LPCTSTR lpszValueName=NULL);
dwValue:设置的整数值
lpszValueName:设置的项名称
lpsaValue:设置的字符串数据
hKeyParent:父键句柄
lpszKeyName:键名称
lpszValue:设置的项数据
lpszValueName:项名称


4.QueryValue


该方法用于获取指定键下的数据
LONG QueryValue(LPCTSTR pszValueName,DWORD* pdwType,void* pData,ULONG pnBytes);
ATL_DEPRECATED LONG QueryValue(DWORD& dwValue,LPCTSTR lpszValueName);
ATL_DEPRECATED LONG QueryValue(LPTSTR szValue,LPCTSTR lpszValueName,DWORD *pdwCount);
pszValueName:查询的项名称
pdwType:整数指针,用于返回项的数据类型
pData:数据缓冲区,用于存储函数返回的数据
pnBytes:数据缓冲区pData的大小,在函数返回后,该函数表示实际返回的数据大小
dwValue:用于存储函数返回的整形数据
lpszValueName:要查询的注册表项名称
szValue:数据缓冲区,用于存储函数返回的字符串数据
pdwCount:字符串数据的大小
写入
::OnOk(){CRegKey reg;//定义一个CRegKey对象CString key;//定义一个字符串变量m_KeyName.GetWindowText(key);//获取编辑框文本reg.create(HKEY_CURRENT_USER,key);//创建注册表键值CString item;//定义字符串变量m_ItemName.GetWindowtext(item);//获取项名CString value;//定义字符串变量m_ItemValue.GetWindowText(value);//获取项值reg.SetValue(value.item);//项注册表中写入数据reg.close();//关闭注册表键句柄}


读取
::OnLoad(){CRegKey reg;//定义一个CRegKey对象CString key;//定义字符串变量m_KeyName.GetWindowText(key);//获取键名reg.Open(HKEY_CURRENT_USER,key);//打开注册表键值CString item;//定义字符串变量m_ItemName.GetWindowText(item);//获取项名CString value;//定义字符串变量DWORD size=MAX_PATH;//定义整型变量reg.QueryValue(value.GetBuffer(0),item,&size);//从注册表读取数据MessageBox(value,"提示");//一对话框形式弹出读取的数据}



0 0