精易论坛

标题: 求助,获取注册表的指定项里面的所有子项里面的子键值 [打印本页]

作者: 小豹珠宝    时间: 2025-3-28 00:47
标题: 求助,获取注册表的指定项里面的所有子项里面的子键值
如下图所示,“HKEY_LOCAL_MACHINE\SOFTWARE\Pixologic” 和 “HKEY_LOCAL_MACHINE\SOFTWARE\Maxon” 下面的子项都有一个共同的子键值“Location”,我的想法是遍历枚举子项,然后把子项的名称加入到组合框,然后在组合框里面的子项名称被选中时,会根据选中的子项名获取到Location值,然后把Location值填入到编辑框.内容,请教以下大佬,有知道怎么操作的吗?刚刚给我解答的 @算法艺术家  大佬,能看到这个贴子吗?刚刚那个点太快了,帖子无法回复了。





作者: 算法艺术家    时间: 2025-3-28 00:47
  
子程序名返回值类型公开备 注
_组合框1_列表项被选择  
变量名类 型静态数组备 注
结果注册表_键 
reg注册表操作Ex 
内容文本型 
路径文本型 
键名称文本型 
内容 = 组合框1.取项目文本 (组合框1.现行选中项)
路径 = “SOFTWARE\”文本_取左边 (内容, “\”, )
调试输出 (“路径”, 路径)
键名称 = 文本_取右边 (内容, “\”, )
调试输出 (“键名称”, 键名称)
reg.读取键值Ex ( #HKEY_LOCAL_MACHINE, 路径, 键名称, 结果)


i支持库列表   支持库注释   
spec特殊功能支持库



补充内容 (2025-3-28 01:15):
你调试下看看吧 不对的地方改改 大概就这个思路

补充内容 (2025-3-28 01:16):
少复制了一行代码
编辑框.内容 = 到文本 (结果.键值)
作者: 算法艺术家    时间: 2025-3-28 00:53
添加到编辑框简单,关键是既然有重复的名称,那你点的时候怎么知道你想要的是哪个呢,除非你把路径都带上一起添加到组合框里

补充内容 (2025-3-28 00:54):
或者把上一级路径添加到组合框里
作者: 算法艺术家    时间: 2025-3-28 00:57
  
变量名类 型静态数组备 注
reg注册表操作Ex 
数组文本型0
i整数型 
reg.枚举子项Ex ( #HKEY_LOCAL_MACHINE, “SOFTWARE\Maxon\”, 数组)
计次循环首 (取数组成员数 (数组), i)
组合框1.加入项目 (“Maxon\” + 数组 [i], )
计次循环尾 ()
reg.枚举子项Ex ( #HKEY_LOCAL_MACHINE, “SOFTWARE\Pixologic\”, 数组)
计次循环首 (取数组成员数 (数组), i)
组合框1.加入项目 (“Pixologic\” + 数组 [i], )
计次循环尾 ()
子程序名返回值类型公开备 注
_组合框1_列表项被选择  
编辑框.内容=组合框1.取项目文本 (组合框1.现行选中项)


作者: 小豹珠宝    时间: 2025-3-28 01:12
算法艺术家 发表于 2025-3-28 00:57
[e=3].版本 2

.局部变量 reg, 注册表操作Ex

现在组合框的项目都加了上一级的路径了,
请问接下来的Location值又该如何添加到编辑框1.内容里面去呢?
其实这个Location值就是软件的安装路径,我是想通过注册表的方式获取这个路径,因为这个软件版本很多,不同版本名都会有不同的子项,所以我是想通过遍历枚举指定项下面的子项,然后再获取子项下面的子键Location值。
作者: yk125    时间: 2025-3-28 09:21
枚举取出安装路径加到组合框不是更直观更方便?
作者: aipca    时间: 2025-3-28 10:52

是这个意思吧


补充内容 (2025-3-28 10:55):
编辑框按回车保存修改

注册表枚举到编辑框修改.e

1.08 MB, 下载次数: 3


作者: 小豹珠宝    时间: 2025-3-28 21:33
aipca 发表于 2025-3-28 10:52
是这个意思吧

为什么我运行的时候没有指定项里面的子项列表出来呢?

作者: 小豹珠宝    时间: 2025-3-28 21:37
算法艺术家 发表于 2025-3-28 01:15
[e=3].版本 2
.支持库 spec

编辑框1.内容 = 到文本 (结果.键值)
编辑框的内容没有被添加,输出窗口倒是有路径,另外这里面也没有获取到子键Location值。

作者: 小豹珠宝    时间: 2025-3-28 21:40
yk125 发表于 2025-3-28 09:21
枚举取出安装路径加到组合框不是更直观更方便?

主要是指定项Pixologic和Maxon下面的子项有多个子项名,有些人会安装多个版本,如果只有一个版本我直接就指定路径了,要不然也不必花大心思去获取指定项的子项里面的子键值了。
作者: aipca    时间: 2025-3-28 22:45
小豹珠宝 发表于 2025-3-28 21:33
为什么我运行的时候没有指定项里面的子项列表出来呢?

正常64位系统,是写到HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node下的,也许你这个软件是不分64位还是32位,都是直接写到HKEY_LOCAL_MACHINE\SOFTWARE\下面,那就把判断是否64给取消,直接定义路径1和路径2为你真实路径。

补充内容 (2025-3-28 22:47):
把路径1和路径2里面的“WOW6432Node\“去掉。
作者: 小豹珠宝    时间: 2025-3-28 23:44
aipca 发表于 2025-3-28 22:45
正常64位系统,是写到HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node下的,也许你这个软件是不分64位还是32位 ...

去掉了也不行,运行后组合框还是空白的,很奇怪。

作者: aipca    时间: 2025-3-28 23:47
小豹珠宝 发表于 2025-3-28 23:44
去掉了也不行,运行后组合框还是空白的,很奇怪。

判断也去掉啊,只保留路径1和路径2的地址就行

补充内容 (2025-3-28 23:48):
两个判断都去掉,改成
    路径1 = “HKEY_LOCAL_MACHINE\SOFTWARE\Pixologic”
    路径2 = “HKEY_LOCAL_MACHINE\SOFTWARE\Maxon”

补充内容 (2025-3-28 23:49):
在循环里分别调路径,注册项,注册键,注册值 看看是哪个为空
作者: 小豹珠宝    时间: 2025-3-29 00:35
aipca 发表于 2025-3-28 23:47
判断也去掉啊,只保留路径1和路径2的地址就行

补充内容 (2025-3-28 23:48):
  
变量名类 型静态数组备 注
数组文本型0
i整数型 
reg注册表操作Ex 
reg.枚举子项Ex ( #HKEY_LOCAL_MACHINE, “SOFTWARE\Pixologic\”, 数组)
计次循环首 (取数组成员数 (数组), i)
组合框1.加入项目 (“Pixologic\” + 数组 [i], )
组合框1.现行选中项 = 0
计次循环尾 ()
reg.枚举子项Ex ( #HKEY_LOCAL_MACHINE, “SOFTWARE\Maxon\”, 数组)
计次循环首 (取数组成员数 (数组), i)
组合框1.加入项目 (“Maxon\” + 数组 [i], )
计次循环尾 ()
子程序名返回值类型公开备 注
_组合框1_列表项被选择  
变量名类 型静态数组备 注
结果注册表_键 
reg注册表操作Ex 
内容文本型 
路径文本型 
键名称文本型 
子键值文本型 
打开键整数型 
' 编辑框1.内容 = 组合框1.取项目文本 (组合框1.现行选中项)
内容 = 组合框1.取项目文本 (组合框1.现行选中项)
路径 = “SOFTWARE\”文本_取左边 (内容, “\”, , )
调试输出 (“路径”, 路径)
键名称 = 文本_取右边 (内容, “\”, , )
调试输出 (“键名称”, 键名称)
reg.读取键值Ex ( #HKEY_LOCAL_MACHINE, 路径, 键名称, 结果)
编辑框1.内容 = 到文本 (结果.键值)


i支持库列表   支持库注释   
spec特殊功能支持库

补充内容 (2025-3-29 00:37):
@aipca 我用的这个就获取到了指定项里面的子项,但是下一步不知道怎么获取子项里面的Location值了。
这个是@算法艺术家 大佬提供的

补充内容 (2025-3-29 01:15):
.局部变量 安装路径, 文本型
安装路径 = 系统_取文本注册项 (#HKEY_LOCAL_MACHINE, 结果.键名称 + “\” + 键名称, “Location”, 真)
编辑框1.内容 = 安装路径
作者: aipca    时间: 2025-3-29 00:42
小豹珠宝 发表于 2025-3-29 00:35
[e=0].版本 2

.局部变量 数组, 文本型, , "0"

可以结合 系统_取文本注册项来取的。
作者: 小豹珠宝    时间: 2025-3-29 01:18
小豹珠宝 发表于 2025-3-29 00:35
[e=0].版本 2

.局部变量 数组, 文本型, , "0"

通过这样的方式就能完美的获取到Location值了,终于结束了。可以继续下一步操作了,感谢 @算法艺术家  @aipca 两位大佬的帮助




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4