详解常用的注册表操作函数


参数说明:
HKEY hKey 已经打开的键的句柄
DWORD dwIndex
子键的索引,从 0 开始。 LPTSTR lpName
指向保存子
键名的缓冲区的字符指针。注意仅是该子键的名,不包括其层次结构。
DWORD cbName 表示 lpName 指向的缓冲区的大小
返回值:
成功返回 ERROR_SUCCESS,失败放回非零值。
LPCTSTR lpSubKey 表示以 NULL 结尾的字符串指针。该字符串中保存了要创建的 子键的名称和结构。如要在 HKEY_CLASSES_ROOT 的根键下创建一个名为“pro”的子键, 直接为用“pro”。如果要在 pro 下面在创建一个 subpro1。则赋值”pro\\subpro1“。注意:键名 与键名之间用两个下斜杠,这样表示转义;创建 subpro1 子键的时候并不要求 pro 子键已经 存在。如果不存在就一并创建了。
参数说明:
HKEY hKey
根键名或已经打开的键的句柄(注意那本函数没有 LPCTSTR lpSubKey 来
指定子键名,所以 hKey 必须是打开该子键的句柄)
LPCTSTR lpValueName 键值的名称 NULL 表示默认键值。
DWORD Reserved 保留,必须赋值 0.
DWORD dwType 键值的类型,具体见下面的键值类型表。
hKey 用根键名,lpSubKey 指定要删除的键。这样无论该键是否打开都可以删除。 返回值: 成功返回 ERROR_SUCCESS,失败放回非零值。 说明: 本函数仅能够删除没有子键的键。删除时键中的所有键值将一并删除。
LONG RegDeleteKeyEx( HKEY hKey, LPCTSTR lpSubKey, REGSAM samDesired, DWORD
PFILETIME lpftLastWriteTime
);
参数说明:
HKEY hKey 已经打开的键的句柄
DWORD dwIndex
子键的索引,从 0 开始。 LPTSTR lpName
指向保存子
键名的缓冲区的字符指针。注意仅是该子键的名,不包括其层次结构。
LPDWORD lpcbName 本参数既是入参也是出参,输入 lpName 指向的缓冲区大小,函数
Reserved );
参数说明:
前两个参数同 RegDeleteKey()
REGSAM samDesired:本参数有两个指定的值
KEY_WOW64_32KEY 32 位注册表
KEY_WOW64_64KEY
64 位的注册表
DWORD Reserved: 保留参数,仅能够赋值 0。
返回值:
同 RegDeleteKey()。
ቤተ መጻሕፍቲ ባይዱ
lpdwDisposition : 出 参 。 当 返 回 REG_CREATED_NEW_KEY 表 示 为 新 建 的 键 , 返 回
REG_OPENED_EXISTING_KEY 表示键已经存在了。
返回值:
成功返回 ERROR_SUCCESS,失败放回非零值。
说明: RegCreateKey()和 RegCreateKeyEx()访问的键不存在时创建键,如果键存在,就打开 该键。
返回值:
成功返回 ERROR_SUCCESS,失败放回非零值。
说明:
用法基本同 RegEnumKey();
三 常用操作键值的函数
1、写键值
LONG RegSetValue( HKEY hKey, LPCTSTR lpSubKey, DWORD dwType, LPCTSTR lpData,
DWORD cbData );
返回时输入写入缓冲区的字符长度,不包括字符串结束标识符。
LPDWORD lpReserved 保留,仅能够赋值 NULL。
LPTSTR lpClass 指向保存子键类型的缓冲区的字符指针。
LPDWORD lpcbClass 用途同 lpcbName
PFILETIME lpftLastWriteTime 出参,FILETIME 结构体指针,保存子键最后修改的时间。
详解常用的注册表操作函数
一 注册表简介 在“运行”对话框中输入 regedit,回车就打开了 windows 的注册表编辑器。如下图:
注册表编辑器对话框左边树显示了注册表的层次,第一层是 5 个以 HKEY 开头的根键, 在 windows 提供的操作注册表的 API 函数中可以直接使用。下面每个节点叫子键,也可以 叫项。用鼠标单击某个键后,右边的列表区域将显示该键的键值。键值包含名称、类型和数 据三个部分。每个键下面有一个默认的键值,类型为 REG_SZ(以 NULL 结尾的字符串), 在 windows 提供的 API 函数中,访问这个默认值在对应参数中输入 NULL 就可以了。下面 会具体提到。 二 常用操作键的函数 1、创建键
PHKEY phkResult 指向 HKEY 类型变量的指针。本参数用于返回创建的键的句 柄。 返回值:
成功返回 ERROR_SUCCESS,失败放回非零值。
LONG RegCreateKeyEx(
HKEY hKey,
LPCTSTR lpSubKey,
DWORD Reserved,
LPTSTR lpClass,
REGSAM
3、关闭键
LONG RegCloseKey( HKEY hKey );
参数说明
HKEY hKey
已经打开的键的句柄。
返回值:
成功返回 ERROR_SUCCESS,失败放回非零值。
说明:
本函数用于关闭打开的键。
当键不使用后要用这个函数关闭。
4、删除键 LONG RegDeleteKey( HKEY hKey, LPCTSTR lpSubKey ); 参数说明: 两个参数的作用同 RegOpenKey()的同名参数。 注意:hKey 只能是根键名,如果传人的是已经打开的键将删除失败。
参数说明:
HKEY hKey
根键名或已经打开的键的句柄
LPCTSTR lpSubKey 子键名,如果 hKey 已经是该子键的句柄,本参数可以赋值 NULL
DWORD dwType
键值的类型,本参数仅能够赋值 REG_SZ,其他键值类型见最后的
键值类型表。
LPCTSTR lpData
键值的数据
DWORD cbData
LONG RegOpenKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult );
参数说明: 在 RegOpenKey()和基础上 RegOpenKeyEx 增加了两个参数 DWORD ulOptions, samDesired。其他参数同 RegOpenKey() DWORD ulOptions 备用参数,只用赋值 0。 REGSAM samDesired 同 RegCreateKeyEx()的 samDesired 参数。 返回值: 成功返回 ERROR_SUCCESS,失败放回非零值。
Reserved:只能赋值 0
lpClass:键的类型,可以用 NULL 赋值。
dwOptions:这个参数可以取如下的值
REG_OPTION_NON_VOLATILE 键的信息在系统重启后保存到文件中。
REG_OPTION_VOLATILE
键的信息保存在内存中,当系统关闭后,这些信息不被保存。
samDesired:权限设置。可以去如下值
LONG RegDeleteTree(HKEY hKey,LPCTSTR lpSubKey); 参数和返回值同 RegDeleteKey()。 和 RegDeleteKey()的区别是本函数能够删除有子键的键。
5、枚举子键
LONG RegEnumKey( HKEY hKey, DWORD dwIndex, LPTSTR lpName, DWORD cbName )
{
MessageBox(cSubKey);
//用对话框显示子键名
memset(cSubKey,0,sizeof(cSubKey)); //初始化数组
dwIndex++; //索引加 1
}
RegEnumKeyEx LONG RegEnumKeyEx(
HKEY hKey, DWORD dwIndex, LPTSTR lpName, LPDWORD lpcbName, LPDWORD lpReserved, LPTSTR lpClass, LPDWORD lpcbClass,
允许查询值项
KEY_READ
允许枚举子项、修改通知和查询值项
KEY_SET_VALUE
允许设置注册表项的值项
KEY_WRITE
允许创建子项和设置值项
lpSecurityAttributes:设置创建的键的句柄是否可以用于子进程中,赋值为 NULL 表示不能
用于子进程中。
phkResult:出参,保存创建键的句柄。
CONST BYTE *lpData 指向键值的数据。注意本参数是 CONST BYTE *类型,赋值时要
做强制转换。
DWORD cbData
数 据 长 度 。 注 意 写 入 的 是 REG_SZ, REG_EXPAND_SZ, or
打开键有两个函数 RegCreateKey()和 RegCreateKeyEx()。“Ex”表示扩展的意思,比 前一个功能更全面些。
LONG RegCreateKey( HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult); 参数说明:
HKEY hKey 键 的 句 柄 , 在 这 个 函 数 中 就 是 指 根 键 的 句 柄 , 就 是 HKEY_CLASSES_ROOT、HKEY_CURRENT_USER 等 5 个根键的名称。
合集下载

详解常用的注册表操作函数

详解常用的注册表操作函数

返回时输入写入缓冲区的字符长度,不包括字符串结束标识符。
LPDWORD lpReserved 保留,仅能够赋值 NULL。
LPTSTR lpClass 指向保存子键类型的缓冲区的字符指针。
LPDWORD lpcbClass 用途同 lpcbName
PFILETIME lpftLastWriteTime 出参,FILETIME 结构体指针,保存子键最后修改的时间。
2、打开键 打开将的函数有 RegOpenKey()和 RegOpenKeyEx()。
LONG RegOpenKey( HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult) 参数说明: HKEY hKey;可以用根键名,也可以用已经打开的键的句柄。 LPCTSTR lpSubKey:同 RegCreateKey()lpSubKey。 PHKEY phkResult:出参,HKEY 类型变量的指针,保存打开键的句柄。 返回值: 成功返回 ERROR_SUCCESS,失败放回非零值。 说明: 如果 HKEY_CLASSES_ROOT\pro 这个键已经打开,并且将句柄保存在 hRe 中。那么要打开 HKEY_CLASSES_ROOT\pro\subpro1 就可以用 RegOpenKey(hRe,“subpro1”,&hRe1);来 打开 subpro1 子键。
hKey 用根键名,lpSubKey 指定要删除的键。这样无论该键是否打开都可以删除。 返回值: 成功返回 ERROR_SUCCESS,失败放回非零值。 说明: 本函数仅能够删除没有子键的键。删除时键中的所有键值将一并删除。
LONG RegDeleteKeyEx( HKEY hKey, LPCTSTR lpSubKey, REGSAM samDesired, DWORD

modify_reg函数的用法 -回复

modify_reg函数的用法 -回复

modify_reg函数的用法-回复Modify_reg函数是一个用于修改注册表的函数,在Windows操作系统中,注册表是一个分层的数据库,用于存储操作系统、应用程序和硬件设备的配置信息。

修改注册表可以实现各种功能,例如更改系统设置、优化性能和安全性等。

在使用Modify_reg函数之前,我们需要先了解一些注册表的基础知识。

注册表由多个键(Key)和值(Value)组成,每个键又可以包含子键和值。

键的路径类似于文件系统的目录结构,可以通过路径来访问特定的键。

值则存储着具体的配置信息。

首先,我们需要引入Modify_reg函数所在的库文件。

通常,这个库文件是一个动态链接库(DLL)文件,以“.dll”为文件后缀名。

我们可以使用“#include”预处理指令来包含库文件。

例如,如果Modify_reg函数所在的库文件是“reglib.dll”,则我们可以使用以下代码引入库文件:#include "reglib.dll"接下来,我们需要声明Modify_reg函数及其参数的类型。

通常,Modify_reg函数的参数包括键的路径、要修改的键的名称、新的值等。

在C/C++语言中,我们可以使用“void”关键字来声明函数的返回类型为无返回值,然后按照函数参数的类型顺序依次声明参数。

例如,如果Modify_reg函数的声明如下所示:void Modify_reg(char* keyPath, char* keyName, int newValue);然后,我们需要通过调用Modify_reg函数来实际修改注册表。

在参数列表中,我们需要传入具体的键的路径、键的名称和新的值。

例如,如果我们要修改注册表中的一个名为“ExampleKey”的键的值为100,我们可以使用以下代码调用Modify_reg函数:Modify_reg("HKEY_CURRENT_USER\Software\Example", "ExampleKey", 100);在调用Modify_reg函数之后,函数会尝试找到指定路径中的键,并修改该键的名称为新的值。

mfc读写注册表函数

mfc读写注册表函数

mfc读写注册表函数在Microsoft Foundation Classes (MFC)库中,读写注册表的函数通常通过CWinThread类和CWinApp类的成员函数实现。

以下是一些常用的函数:SetRegistryKey:这个函数用于设置当前线程的注册表键。

cppvoid SetRegistryKey(LPCTSTR lpszRegistryKey); OpenRegistryKey:这个函数用于打开一个指定的注册表键。

cppBOOL OpenRegistryKey(HKEY hRootKey, LPCTSTR lpszSubKey, HKEY& hKey);WriteRegistryValue:这个函数用于写入一个注册表值。

cppBOOL WriteRegistryValue(LPCTSTR lpszValueName, DWORD dwType, LPVOID lpData, DWORD cbData);ReadRegistryValue:这个函数用于读取一个注册表值。

cppBOOL ReadRegistryValue(LPCTSTR lpszValueName, DWORD& dwType, LPVOID lpData, DWORD& cbData);使用MFC读写注册表的例子:写入注册表cppCWinThread* pThread = AfxGetThread();pThread->SetRegistryKey(_T("Software\\MyApp"));HKEY hKey;if (pThread->OpenRegistryKey(_T(""), KEY_WRITE, hKey) == ERROR_SUCCESS) {CString valueName = _T("KeyName");DWORD dwValue = 12345;if (pThread->WriteRegistryValue(valueName, REG_DWORD, &dwValue, sizeof(dwValue)) == ERROR_SUCCESS) {AfxMessageBox(_T("写入注册表成功!"));} else {AfxMessageBox(_T("写入注册表失败!"));}pThread->RegCloseKey(hKey);} else {AfxMessageBox(_T("打开注册表键失败!"));}读取注册表cppCWinThread* pThread = AfxGetThread();pThread->SetRegistryKey(_T("Software\\MyApp"));HKEY hKey;if (pThread->OpenRegistryKey(_T(""), KEY_READ, hKey) == ERROR_SUCCESS) {CString valueName = _T("KeyName");DWORD dwType, dwValue;DWORD cbData = sizeof(dwValue);if (pThread->ReadRegistryValue(valueName, &dwType, &dwValue, &cbData) == ERROR_SUCCESS) {AfxMessageBox(_T("读取到的值是:") + dwValue); } else {AfxMessageBox(_T("读取注册表值失败!"));}pThread->RegCloseKey(hKey);} else {AfxMessageBox(_T("打开注册表键失败!"));}。

regopenkey函数

regopenkey函数

regopenkey函数regopenkey函数是在Windows操作系统中广泛使用的一个功能,用于打开注册表中指定键值的函数。

本文将一步一步回答关于regopenkey函数的相关问题,深入探讨其使用方法和实际应用。

一、什么是regopenkey函数?regopenkey函数是Windows操作系统提供的一个API函数,用于打开注册表中的指定键值。

注册表是Windows系统中通过键值对的形式存储配置信息的重要数据存储区域,其中包含了操作系统和应用程序的配置信息。

regopenkey函数可以根据指定的路径和键名打开相应的注册表键值,以便进行读取或写入操作。

二、regopenkey函数的语法和参数regopenkey函数的语法如下:c++LONG RegOpenKey(HKEY hKey,LPCTSTR lpSubKey,PHKEY phkResult);其中,参数hKey表示要打开键的父键,lpSubKey表示要打开键的名称,phkResult表示函数执行成功后返回的键句柄。

三、如何使用regopenkey函数?1. 引入Windows.h头文件:在使用regopenkey函数之前,需要引入Windows.h头文件,该头文件定义了Windows操作系统的API函数和数据类型。

2. 打开注册表父键:使用regopenkey函数之前,需要先打开注册表的父键。

可以使用RegOpenKeyEx函数或者RegCreateKeyEx函数来打开或创建父键。

3. 调用regopenkey函数:使用regopenkey函数来打开指定的注册表键值。

在调用该函数时,需要传入父键句柄、子键名称和存储返回键句柄的变量。

4. 检查返回值:在调用regopenkey函数后,需要检查返回值以判断函数是否执行成功。

如果返回值为ERROR_SUCCESS,表示函数执行成功,否则表示执行失败。

5. 使用返回的键句柄:当regopenkey函数成功执行后,返回的键句柄可用于进行读取或写入注册表信息的操作。

C_注册表操作理论及应用

C_注册表操作理论及应用
rkSub.DeleteSubKey( %%1, false );
4.枚举第一个键
//using System.Collections;
IEnumerator<string> it = SubKey.GetSubKeyNames().First();
string %%1=it.Current;
subkeyNames = aimdir.GetSubKeyNames();
foreach(string keyName in subkeyNames)
{
if(keyName == name)
{
_exit = true;
//using Microsoft.Win32;
private static void Access_Registry(RegistryKey keyR, String str)
{
string[] subkeyNames;
string[] subvalueNames;
const string strSubKey = %%1; //@"SOFTWARE\ODBC\ODBC.INI\DBNewTest\Test"
RegistryKey rkSub = rkLocalM.CreateSubKey( strSubKey );
rkLocalM.Close();
3.删除键
return _exit;
}
}
return _exit;
}
以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中判断名称为name注册表项是否存在,这一方法在删除注册表时已经存在,在新建一注册表项时也应有相应判断;

VBA操作注册表的三种方法

VBA操作注册表的三种方法

教大家用VBA来控制注册表三种办法1、利用强大的API函数。

API功能强大,除了其它功能外也可以用来操作注册表,但一般都会封装原始的API函数,使操作注册表更方法2、利用Windows Scripting Host的注册表函数来完成。

WSH的RegWrite(设置注册表的键或值),RegRead (获得注册表的键或值与RegDelete(删除键或值)也可以用来操作注册表,而且没有上面的限制,下面还是用一段代码来了解这三个函数的用法:Sub 利用WSH操作注册表()Dim 注册表主键As StringDim 工程名称As StringDim 注册表项As StringDim 注册表键名As V ariantDim 注册表键值As V ariantDim arr As V ariantDim ii As IntegerDim WSH As WshShellSet WSH = CreateObject("WSCRIPT.SHELL")注册表主键= "HKEY_CURRENT_USER\Software\"工程名称= "Excel吧"注册表项= "网站"注册表键名= Array("地址", "站长", "创建时间")注册表键值For ii = 0 To UBound(注册表键名)WSH.RegWrite 注册表主键& 工程名称& "\" & 注册表项& "\" & 注册表键名(ii), 注册表键值(ii) NextMsgBox "已成功在" & 注册表主键& "中写入键值!"MsgBox "接下来利用RegRead一个个读出写入的键值"For ii = 0 To UBound(注册表键名)MsgBox 工程名称& 注册表项& 注册表键名(ii) & "是" & WSH.RegRead(注册表主键& 工程名称& "\" & 注册表项& "\" & 注册表键名(ii))NextWSH.RegDelete 注册表主键& 工程名称& "\" & 注册表项& "\"WSH.RegDelete 注册表主键& 工程名称& "\"MsgBox "已成功删除写入的键值!"End Sub3、利用内置的操作注册表的函数来完成。

mfc读写注册表函数

mfc读写注册表函数摘要:1.MFC 简介2.注册表简介3.MFC 中的注册表操作函数4.读写注册表的实例代码正文:一、MFC 简介MFC(Microsoft Foundation Class)是微软提供的一套用于开发Windows 应用程序的类库。

它提供了许多方便的类和函数,使开发者能够简化编程过程,快速地开发出功能强大的应用程序。

二、注册表简介注册表是Windows 操作系统中的一个核心组件,用于存储系统和应用程序的配置信息。

它由一系列键值对组成,可以存储各种数据类型,如字符串、整数、布尔值等。

注册表具有较高的安全性和稳定性,可以确保应用程序和系统配置的正确性。

三、MFC 中的注册表操作函数MFC 提供了一系列用于操作注册表的函数,包括读取、写入和删除注册表键值等。

以下是一些常用的MFC 注册表操作函数:1.RegOpenKeyEx:打开注册表键2.RegCloseKey:关闭注册表键3.RegSetValueEx:写入注册表键值4.RegGetValueEx:读取注册表键值5.RegDeleteValue:删除注册表键值6.RegEnumValue:枚举注册表键的值7.RegCreateKey:创建注册表键四、读写注册表的实例代码下面是一个使用MFC 读写注册表的简单示例:```cpp#include <afx.h>#include <iostream>void ReadRegistration(void){// 打开注册表键HKEY hKey;if (RegOpenKeyEx(HKEY_CURRENT_USER, "SoftwareMyApp", 0, KEY_READ, &hKey)!= ERROR_SUCCESS){MessageBox("打开注册表键失败!");return;}// 读取注册表键值DWORD dwValue;if (RegGetValueEx(hKey, "key_name", 0, &dwValue,sizeof(dwValue))!= ERROR_SUCCESS){MessageBox("读取注册表键值失败!");RegCloseKey(hKey);return;}// 输出读取到的值std::cout << "读取到的值:" << dwValue << std::endl;// 关闭注册表键RegCloseKey(hKey);}void WriteRegistration(void){// 打开注册表键HKEY hKey;if (RegOpenKeyEx(HKEY_CURRENT_USER, "SoftwareMyApp", 0, KEY_WRITE, &hKey)!= ERROR_SUCCESS){MessageBox("打开注册表键失败!");return;}// 写入注册表键值DWORD dwValue = 12345;if (RegSetValueEx(hKey, "key_name", 0, &dwValue, sizeof(dwValue))!= ERROR_SUCCESS){MessageBox("写入注册表键值失败!");RegCloseKey(hKey);return;}// 输出写入到的值std::cout << "写入到的值:" << dwValue << std::endl;// 关闭注册表键RegCloseKey(hKey);}int main(){// 读取注册表值ReadRegistration();// 写入注册表值WriteRegistration();return 0;}```以上代码示例首先打开注册表键,然后分别读取和写入键值。

注册表API函数

有关注册表API函数
作者:loose_went 阅读人次:341 文章来源:VC在线 发布时间:2007-8-22 网友评论(0)条
注册表的操作,API为我们提供了大约25个函数。他提供了对注册表的读取,写入,删除,以及打开注册表及键值时所有函数,并且可以达到对注册表的备份,连接和对远端注册表进行查看等等。注册表对整个系统十分重要,你在进行操作时,一定要先考虑清楚。这些函数有:
LPDWORD lpType, // 查询的类型
LPBYTE lpData, // 数据存放的地址
LPDWORD lpcbData // 数据长度+1
);
返回值:不成功返回非0,成功返回ERROR_SUCCESS
if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行
{
MessageBox("错误: 无法打开有关的hKEY!");
return;
}
if(dwDisposition==REG_OPENED_EXISTING_KEY)
LPDWORD lpdwDisposition //用来查看是打开一个已经有的键,还是新建了键
);
RegCreateKey()函数简单了不少,请自己看了。
返回值:不成功返回非0,成功返回ERROR_SUCCESS.
解释:打开指定的键或子键。如果要打开的键不存在的话,本函数会试图建立它。当在创建或打开注册表的键时,需要指定访问权限,而这些访问权限需要到一级。默认的权限是KEY_ALL_ACCESS权限。还有KEY_CREATE_LINK创建字符链权限,KEY_CREATE_SUB_KEY创建子键权限,KEY_EXECUTE读取键权限,KEY_NOTIFY获得修改键通知的权限,KEY_QUERY_VALUE查询键值的权限,KEY_SET_VALUE设置数据值的权限。注意不能在根一级建键,在注册表的根一级仅可有预定义的键。具体使用,请查看联机手册。

C 注册表操作大全

C++注册表操作大全.txt用快乐去奔跑,用心去倾听,用思维去发展,用努力去奋斗,用目标去衡量,用爱去生活。

钱多钱少,常有就好!人老人少,健康就好!家贫家富,和睦就好。

1.打开键CString StrKey(%%1);HKEY m_hKey=%%2;if (ERROR_SUCCESS==::RegOpenKeyEx(m_hKey,StrKey,NULL,KEY_ALL_ACCESS,&m_hKey)) {%%3}2.添加键CString StrKey(%%1);HKEY hKey;DWORD dwDisposition;if (ERROR_SUCCESS==::RegCreateKeyEx(m_hKey, (LPCTSTR)StrKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition)){m_hKey=hKey;if (dwDisposition==REG_CREATED_NEW_KEY){%%2}else if (dwDisposition==REG_OPENED_EXISTING_KEY){%%3}}3.删除键CString StrKey(%%1);HKEY SrcKey=m_hKey;char KeyName[256];int nRes=0;if (OpenKey(SrcKey,StrKey)){nRes=FirstEnumKey(KeyName);while (nRes){DeleteKey(KeyName);nRes=NextEnumKey(KeyName);}}if (::RegDeleteKey(SrcKey,StrKey)==ERROR_SUCCESS){%%2}4.枚举第一个键DWORD dwSize=255;m_EnumLoop=0;if(ERROR_SUCCESS==::RegEnumKeyEx(m_hKey,m_EnumLoop,%%1,&dwSize,NULL,NULL,NULL,NULL )){%%2}5.枚举下一个键DWORD dwSize=255;m_EnumLoop++;if(ERROR_SUCCESS==::RegEnumKeyEx(m_hKey,m_EnumLoop,%%1,&dwSize,NULL,NULL,NULL,NULL )){%%2}6.获取DWORD值CString StrChildKey(%%1);DWORD %%1;DWORD dwSize=255,dwType=REG_DWORD;if (ERROR_SUCCESS==::RegQueryValueEx(m_hKey,StrChildKey,0,&dwType,(BYTE *)(&%%2),&dwSize)){%%2}7.获取二进制值CString StrChildKey(%%1);DWORD %%1;DWORD dwSize=255,dwType=REG_BINARY;if (ERROR_SUCCESS==::RegQueryValueEx(m_hKey,StrChildKey,0,&dwType,(BYTE *)(&%%2),&dwSize)){%%2}8.读取字符串值CString StrChildKey(%%1);CString %%2;DWORD dwSize=255,dwType=REG_SZ;char String[256];if (ERROR_SUCCESS==::RegQueryValueEx(m_hKey,StrChildKey,0,&dwType,(BYTE *)String,&dwSize))%%2=CString(String);9.写入字符串值CString StrChildKey(%%1);CString Value;CString %%2;if (ERROR_SUCCESS==::RegSetValueEx( m_hKey,(LPCTSTR)StrChildKey,0,REG_SZ,(BYTE *)(LPCSTR)Value,strlen(Value)+1) )%%2=CString(Value);10.写入二进制值CString StrChildKey(%%1);const char* %%2;if(ERROR_SUCCESS==::RegSetValueEx( m_hKey,(LPCTSTR)StrChildKey,0,REG_BINARY,(BYTE *)%%2,strlen(Value)) ){%%3}11.写入DWORD值CString StrChildKey(%%1);DWORD %%2;if (ERROR_SUCCESS==::RegSetValueEx( m_hKey,(LPCTSTR)StrChildKey,0,REG_DWORD,(BYTE *)&%%2,sizeof(Value)) ){%%3}12.设置DWORD值BOOL CRegEdit::SetDwordValue(HKEY Root, LPCTSTR StrKey, LPCTSTR StrChildKey, DWORD Value)m_hKey=m_RootKey=Root;if (CreateKey(StrKey)){if (WriteDword(StrChildKey,Value)){%%2}13.删除值if (ERROR_SUCCESS==RegDeleteValue(m_hKey,%%1)){%%2}14.关闭键if (m_hKey!=NULL)::RegCloseKey(m_hKey);15.列出一个键下所有的子键//#define MAX_KEY_LENGTH 255TCHAR subKey[MAX_KEY_LENGTH];DWORD numSubKey=0;DWORD i;DWORD sizeSubKey;TCHAR subKey[MAX_KEY_LENGTH];RegQueryInfoKey(m_hKey,NULL,NULL,NULL,&numSubKey,NULL,NULL,NULL,NULL,NULL,NULL,N ULL);if (numSubKey){for (i=0; i<numSubKey; i++){subKey[0]='\0';sizeSubKey=MAX_KEY_LENGTH;RegEnumKeyEx(m_hKey,i,subKey,&sizeSubKey,NULL,NULL,NULL,NULL);CString %%1=CString(subKey);}}16.列出一个键下所有的值//#define MAX_KEY_LENGTH 255//#define MAX_VALUE_NAME 16383TCHAR achKey[MAX_KEY_LENGTH];DWORD cbName;TCHAR achClass[MAX_PATH] = TEXT("");DWORD cchClassName = MAX_PATH;DWORD cSubKeys=0;DWORD cbMaxSubKey;DWORD cchMaxClass;DWORD cValues;DWORD cchMaxValue;DWORD cbMaxValueData;DWORD cbSecurityDescriptor;FILETIME ftLastWriteTime;DWORD i, retCode;TCHAR achValue[MAX_VALUE_NAME];DWORD cchValue = MAX_VALUE_NAME;retCode = RegQueryInfoKey;(m_hKey,achClass,&cchClassName,NULL,&cSubKeys,&cbMaxSubKey,&cchMaxClass,&cValues ,&cchMaxValue,&cbMaxValueData,&cbSecurityDescriptor,&ftLastWriteTime);if (cValues){for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++){cchValue = MAX_VALUE_NAME;achValue[0] = '\0';retCode = RegEnumValue(m_hKey, i,achValue,&cchValue,NULL,NULL,NULL,NULL);if (retCode == ERROR_SUCCESS ){CString %%1=CString(achValue);%%2}}}17.列出一个键下所有的子键和值//#define MAX_KEY_LENGTH 255//#define MAX_VALUE_NAME 16383TCHAR achKey[MAX_KEY_LENGTH];DWORD cbName;TCHAR achClass[MAX_PATH] = TEXT("");DWORD cchClassName = MAX_PATH;DWORD cSubKeys=0;DWORD cbMaxSubKey;DWORD cchMaxClass;DWORD cValues;DWORD cchMaxValue;DWORD cbMaxValueData;DWORD cbSecurityDescriptor;FILETIME ftLastWriteTime;DWORD i, retCode;TCHAR achValue[MAX_VALUE_NAME];DWORD cchValue = MAX_VALUE_NAME;retCode = RegQueryInfoKey(m_hKey,achClass,&cchClassName,NULL,&cSubKeys,&cbMaxSubKey,&cchMaxClass,&cValues ,&cchMaxValue,&cbMaxValueData,&cbSecurityDescriptor,&ftLastWriteTime);if (cSubKeys){for (i=0; i<cSubKeys; i++){cbName = MAX_KEY_LENGTH;retCode = RegEnumKeyEx(m_hKey,i,achKey,&cbName,NULL,NULL,NULL,&ftLastWriteTime); if (retCode == ERROR_SUCCESS) {CString %%1=CString(achKey);%%2}}}if (cValues){for (i=0, retCode=ERROR_SUCCESS; i<cValues; i++){cchValue = MAX_VALUE_NAME;achValue[0] = '\0';retCode = RegEnumValue(m_hKey, i,achValue,&cchValue,NULL,NULL,NULL,NULL);if (retCode == ERROR_SUCCESS ){CString %%3=CString(achValue);%%4}}}18.枚举所有的子键和值void RegSearch(HKEY hKey, TCHAR rootKey[], CString path){DWORD numSubKey=0; //存放子键的项数DWORD i; //计数DWORD sizeSubKey; //子键大小TCHAR subKey[MAX_KEY_LENGTH]; //子键名/*打开hKey中的rootKey, hKey乃继承递归调用者之hKey, rootKey乃递归调用者之subKey*/RegOpenKeyEx( hKey, //欲开之键柄rootKey, //欲开之根键名0, //保留值,强制0KEY_READ, //权限&hKey); //打开子键后,返回键柄/*首先查当前键下的值们(表明是复数哈)是否有符合条件的*/if (RegQueryValueEx( hKey, //欲开之键柄m_content, //欲查询的值NULL,NULL,NULL,NULL)==ERROR_SUCCESS){findFlag=1; //在该键下,直接查找成功m_result=path;return; //跳出递归}/*没有查到,则进入子键查询*/else{/*首先查得当前键下的子键项数*/RegQueryInfoKey( hKey,NULL,NULL,NULL,&numSubKey, //查得子键的项数NULL,NULL,NULL,NULL,NULL,NULL,NULL);/*如果子键数不为0,遍历子键*/if (numSubKey){for (i=0; i<numSubKey; i++){subKey[0]='\0'; //该两行很重要,保证了每次循环的初始sizeSubKey=MAX_KEY_LENGTH; //第一行清空子键,第二行赋缓冲区大小RegEnumKeyEx( hKey, //键柄i, //子键序号subKey, //存入子键名&sizeSubKey,//指明缓冲区大小NULL,NULL,NULL,NULL);RegSearch (hKey,subKey,path+subKey+"\\"); //递归}}}RegCloseKey(hKey); //收尾工作是一定要做的,否则机器会异常的慢}RegSearch (HKEY_USERS,"","");m_result="HKEY_USERS\\"+m_result;break;RegSearch(HKEY_LOCAL_MACHINE,"","");m_result="HKEY_LOCAL_MACHINE\\"+m_result;break;19.模糊搜索所有的子键和值,查找特定字符串并删除void RegSearch(HKEY hKey, TCHAR rootKey[], CString path){DWORD numSubKey=0; //存放子键的项数DWORD i; //计数DWORD sizeSubKey; //子键大小TCHAR subKey[MAX_KEY_LENGTH]; //子键名/*打开hKey中的rootKey, hKey乃继承递归调用者之hKey, rootKey乃递归调用者之subKey*/RegOpenKeyEx( hKey, //欲开之键柄rootKey, //欲开之根键名0, //保留值,强制0KEY_READ, //权限&hKey); //打开子键后,返回键柄/*首先查当前键下的值们(表明是复数哈)是否有符合条件的*/if (RegQueryValueEx( hKey, //欲开之键柄m_content, //欲查询的值NULL,NULL,NULL,NULL)==ERROR_SUCCESS){findFlag=1; //在该键下,直接查找成功m_result=path;return; //跳出递归}/*没有查到,则进入子键查询*/else{/*首先查得当前键下的子键项数*/RegQueryInfoKey( hKey,NULL,NULL,NULL,&numSubKey, //查得子键的项数NULL,NULL,NULL,NULL,NULL,NULL,NULL);/*如果子键数不为0,遍历子键*/if (numSubKey){for (i=0; i<numSubKey; i++){subKey[0]='\0'; //该两行很重要,保证了每次循环的初始sizeSubKey=MAX_KEY_LENGTH; //第一行清空子键,第二行赋缓冲区大小RegEnumKeyEx( hKey, //键柄i, //子键序号subKey, //存入子键名&sizeSubKey,//指明缓冲区大小NULL,NULL,NULL,NULL);RegSearch (hKey,subKey,path+subKey+"\\"); //递归}}}RegCloseKey(hKey); //收尾工作是一定要做的,否则机器会异常的慢}RegSearch (HKEY_USERS,"","");m_result="HKEY_USERS\\"+m_result;break;RegSearch(HKEY_LOCAL_MACHINE,"","");m_result="HKEY_LOCAL_MACHINE\\"+m_result;break;。

C#操作注册表

C#操作注册表⼀.注册表巢在注册表中,最上⾯的节点是注册表巢(registry hive)。

HKEY_CLASSES_ROOT(HKCR) 包含系统⽂件类型的细节,以及应⽤程序可以打开的⽂件类型,它还包含所有COM组件的注册信息。

HKEY_CURRENT_USER(HKCU) 包含⽤户⽬前登陆的机器的⽤户配置,包括桌⾯设置、环境变量、⽹络和打印机连接和其他定义⽤户操作环境的变量。

HKEY_LOCAL_MACHINE(HKLM) 是⼀个很⼤的巢,其中包含所有安装到机器上的软件和硬件的信息。

HKEY_USERS(HKUSR) 包含所有⽤户的⽤户配置。

HKEY_CURRENT_CONFIG(HKCF) 包含机器上硬件的信息。

⼆.注册表类及常⽤属性和函数using Microsoft.Win32;这个命名空间包含了注册表相关的类。

Registry类、RegistryKey类。

Registry类封装了注册表的七个基本主键:Registry.ClassesRoot对应于HKEY_CLASSES_ROOT主键Registry.CurrentUser对应于HKEY_CURRENT_USER主键Registry.LocalMachine对应于 HKEY_LOCAL_MACHINE主键er对应于 HKEY_USER主键Registry.CurrentConfig对应于HEKY_CURRENT_CONFIG主键Registry.DynDa 对应于HKEY_DYN_DATA主键Registry.PerformanceData对应于HKEY_PERFORMANCE_DATA主键RegistryKey类封装了对注册表的基本操作。

包括读、写、删等操作的常⽤函数:Name键的名称(只读)SubKeyCount键的⼦键个数ValueCount键包含的值的个数Close()关闭键CreateSubKey()创建给定名称的⼦键DeleteSubKey()删除指定的⼦键DeleteSubKeyTree()递归删除⼦键及其所有的⼦键DeleteValue()从键中删除⼀个指定的值GetAccessControl()返回指定注册表键的访问控制表GetSubKeyNames()返回包含⼦键名称的字符串数组GetValue()返回指定的值GetValueKind()返回指定的值,检索其注册表数据类型GetValueNames()返回⼀个包含所有键值名称的字符串数组OpenSubKey()返回表⽰给定⼦键的RegistryKey实例引⽤SetAccessControl()把访问控制表(ACL)应⽤于指定的注册表键SetValue()设置指定的值三注册表项的创建、打开、删除1,创建//使⽤CreateSubKey()在SOFTWARE下创建⼦项testRegistryKey hklm = Registry.LocalMachine;RegistryKey hkSoftWare = hklm.CreateSubKey(@"SOFTWARE\test");hklm.Close();hkSoftWare.Close();2,打开//使⽤OpenSubKey()打开项,获得RegistryKey对象,当路径不存在时,为Null。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档