找回密码
 加入
搜索
查看: 8213|回复: 13

[AU3基础] 请问如何判断一个注册表的键值是否存在

 火.. [复制链接]
发表于 2012-5-8 20:33:00 | 显示全部楼层 |阅读模式
例如如何读取这个键值是否存在?
"HKEY_CLASSES_ROOT\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a"

如果存在,执行1。EXE,不存在执行2。EXE。但是我RegRead没法读取,请问该如何判断呢?
发表于 2012-5-8 20:40:18 | 显示全部楼层
本帖最后由 netegg 于 2012-5-8 20:42 编辑

$reg = regenumkey(" HKEY_CLASSES_ROOT\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a", 1)
if @error then
run(2.exe)
else
run(1.exe)
endif
 楼主| 发表于 2012-5-8 21:31:25 | 显示全部楼层
谢谢,已经成功运行~
发表于 2012-5-8 21:41:11 | 显示全部楼层
问题解决了请结贴,看楼的问题都不结贴的。
结贴方法:重新编辑帖子在标题上加上【已解决】
发表于 2012-5-8 22:29:50 | 显示全部楼层
编辑帖子在标题上加上【已解决】也是对帮助者的尊重
发表于 2012-5-8 23:10:50 | 显示全部楼层
这个 问题如果看看帮助文档也能搞定。。。。

评分

参与人数 1贡献 -1 收起 理由
netegg -1 多数问题看帮助都能解决

查看全部评分

发表于 2012-5-12 17:21:54 | 显示全部楼层
本帖最后由 Qokelate 于 2012-5-12 17:39 编辑

回复 2# netegg


    这方法并非好办法,因为枚举不包含 (默认) 键,这方法得到的结果不具备客观性,事实上,项存在,也可能仅存在 (默认) 键!!  本人推荐的方法是使用 _WinAPI_RegQueryLastWriteTime()  如果能得到创建时间说明存在,反之则不存在,或者用 _WinAPI_RegOpenKey()
发表于 2012-5-12 17:23:20 | 显示全部楼层
想学习注册表代码.
发表于 2012-5-12 18:04:37 | 显示全部楼层
本帖最后由 netegg 于 2012-5-12 18:10 编辑

回复 7# Qokelate
谁告诉你不包含默认键,不过懒得写了,那个索引好像是0或-1,另外你指的应该是默认值吧,不是键
发表于 2012-5-12 18:27:37 | 显示全部楼层
回复 9# netegg


    好吧,————     囧

PS:你用Enum方法找出 默认 的索引号我看看
发表于 2012-5-12 19:42:20 | 显示全部楼层
回复 10# Qokelate
只写了一部分,没有子键的二级子键
[au3]Local $i = 1, $j = 1
While 1
        $key = RegEnumKey('hkcr', $i)
        If $key = '' Then
                ExitLoop
        Else
                Do
                        $subkey = RegEnumKey('hkcr\' & $key, $j)
                        If Not $subkey = '' Then readvalue($key, $subkey)
                        $j += 1
                Until RegEnumKey('hkcr\' & $key, $j) = ''
        EndIf
        $j = 1
        $i += 1
WEnd
Func readvalue($key, $subkey)
        consolewrite($key&'\'& $subkey& @cr)
        $m =0
        While 1
                $data = RegEnumVal('hkcr\' & $key & '\' & $subkey, $m)
                If $data = '' Then Return
                ConsoleWrite('hkcr\' & $key & '\' & $subkey & ' ' & $data &  ' ' & RegRead('hkcr\' & $key & '\' & $subkey, $data)& @CR)
                $m += 1
        WEnd
endfunc

[/au3]
发表于 2012-5-13 00:17:19 | 显示全部楼层
很好,通过枚举得到的健肯定是存在的,但反过来,按楼主要求是进行判断是否存在的话就没多大作用了
发表于 2012-5-13 02:48:20 | 显示全部楼层
本帖最后由 netegg 于 2012-5-13 02:55 编辑

回复 12# Qokelate

怎么会没用呢,只是效率可能低了些
其实,如果lz这个问题,如果是指定键名或值的话,应该更简单
RegRead ( "键名", "值项")
if @error<> 0  then
判断下@error值就行了
返回空字符串 "",并把 @error 设为以下值之一:
1 如果不能打开被请求的键
2 如果不能打开被请求的主键
3 如果不能远程连接到注册表
-1 如果不能打开被请求的值
-2 如果值的类型是不支持的
发表于 2012-6-8 01:11:29 | 显示全部楼层
呵呵楼主跑拉
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-28 11:04 , Processed in 0.118347 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表