遍历搜索注册表

一、注册表的组织结构

图一

类比:Key有如文件夹,Value有如文件。

Value组成:Name/Type/Data, 通常指某Value就是指其Name。

二、目前的访问手段

regedit, regedt32, 第三方软件,编程。

Windows提供了三种方式供编程实现:函数,Shell函数 ,CRegKey类(由ATL库提供,是对API的封装,简化了部分功能)。这三种方式 的提供的函数大同小异;由于它们对注册表操作的函数都是原子动作,故功能强 大却使用不便。

类比:dir浏览当前文件夹下的子文件夹和文件,却无法知道 子文件夹中有什么;注册表操作函数也仅能浏览当前Key下的Subkey和Value,却 无法知道Subkey中有什么。

三、面临的问题——本程序的目的

无法直接查询注册表中是否存在某一Key或Value。

为实现对注册表的查询, 必须编程对注册表进行遍历。

递归函数是不二的选择。

图二

时间: 2024-09-22 14:55:21

遍历搜索注册表的相关文章

Advanced Installer,搜索注册表,根据注册表选择安装路径

原文:Advanced Installer,搜索注册表,根据注册表选择安装路径 又停了一段时间没有更新了,今天上博客,发现有位朋友就打包的时候需要搜索注册表(不同版本注册表路径不一致,需要搜索多次来确定安装的是哪个版本,然后再来读取之前的安装路径为现在的路径)来实现安装路径自动选择的问题,这里就这个问题来更新一篇关于搜索注册表和设置安装路径的办法,话不多说,开整. 1.确定安装路径所存的变量名称及更改的地方 老鸟可以无视这个步骤,对于新手可以看一下,这里先说结果,安装路径是存在 APPDIR 这

php设计模式入门-注册表模式

对于这个模式的应用场景不是太好总结,只是根据之前的经验,注册表类里面经常会存储一些别的地方需要用到的对象,比如redis.memcache类,还比如配置信息config类等,它扮演的是一个类似于全局变量的角色.具体的实现其实非常简单,如下代码所示: containers[$key] = $value; } public function get($key){ return isset($this->containers[$key]) ? $this->containers[$key] : nu

VC读注册表获取安装程序

Windows 系统中,安装程序都可以在注册表 HKEY_LOCAL_MACHINE\SoftWare\Microsoft\Windows\CurrentVersion\Uninstall获取,并且xp.vista .win7.win8都一样 打开注册表命令:regedit,依次展开上述注册表路径,安装程序列表如下图: 获取系统安装程序列表: // 获取系统安装程序列表 BOOL CMyListCtrlTestDlg::AllRegKey(HKEY hKey, LPCTSTR szDesKeyI

VC中对注册表进行操作

近来由于需要在自己写的程序中对注册表进行操作.总结些经验,并做个一个DEMO供日后使用,现在把它拿出来和大家分享- 为了使用方便,把一些操作写成了函数,以便方便调用,具体代码如下所示: 一.定义 HKEY hKey; char content[256]; //所查询注册表键值的内容 DWORD dwType=REG_SZ; //定义读取数据类型 DWORD dwLength=256; struct HKEY__*RootKey; //注册表主键名称 TCHAR *SubKey; //欲打开注册表

XP以后Windows版本Delphi操作注册表的办法

手头的程序需要修改注册表, 以让当前程序成为某格式的默认打开程序并关联图标; Vista 之后需要管理 员权限才能操作注册表, 很麻烦, 所以有了下面的尝试. unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdC

C#.Net中如何操作注册表RegistryKey

看看RegistryKey的帮助就知道了,这个东西不复杂,比如: 1.加键加值 01.string appName = "PowerOffOnTime"; 02.//获取执行该方法的程序集,并获取该程序集的文件路径(由该文件路径可以得到程序集所在的目录) 03.string thisExecutablePath = System.Reflection.Assembly.GetExecutingAssembly().Location; 04.//SOFTWARE\\Microsoft\\

C#实现在注册表中保存信息

最近做的项目需要在注册表中记录一些用户设置,方便在程序下次启动时读取设置,应用上次用户保存的设置,挺简单的. 写出来,方便记忆,以后要用,可以直接改改就能用. using System; namespace Backend { public class RegistryStorage { public static PageVisibility OpenAfterStart() { Microsoft.Win32.RegistryKey registryKey; PageVisibility v

Win8怎么打开注册表

  在Windows系统中,注册表是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.从微软最初的Windows 95到最新的Win8系统,注册表在操作系统沿用至今.在Win8之前的系统当中,我们可以在开始运行框中输入Regedit命令快速打开注册表,不过Win8去掉了开始菜单,那么Win8怎么打开注册表呢?这是最近不少新安装Win8用户遇到的棘手问题. 不管是XP.Win7还是最新的Win8系统,注册表的本身功能并没有变,在很多电脑应用技巧的时候都需要进

注册表-双击文件,会把什么参数传给打开方式?怎么使用这些方式。

问题描述 双击文件,会把什么参数传给打开方式?怎么使用这些方式. 我想用c++写一个类似于记事本的功能.做到双击就可以打开自定义类型的文件.可是参数传不过去,根本打不开呀. 解决方案 双击文件,会把调用的文件作为argv[1]传递给程序.你可以写个最简单的小程序测试下.先看看你的注册表的设置对不对. 解决方案二: 假设你说的是Windows平台:这和文件关联有关,文件关联是如何定义的,系统就怎么传输,文件关联有2个,一个是hkey_classes_root,一个是local_user下的clas