clsat 发表于 2012-5-8 20:33:00

请问如何判断一个注册表的键值是否存在

例如如何读取这个键值是否存在?
"HKEY_CLASSES_ROOT\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a"

如果存在,执行1。EXE,不存在执行2。EXE。但是我RegRead没法读取,请问该如何判断呢?

netegg 发表于 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

clsat 发表于 2012-5-8 21:31:25

谢谢,已经成功运行~

zldfsz 发表于 2012-5-8 21:41:11

问题解决了请结贴,看楼的问题都不结贴的。
结贴方法:重新编辑帖子在标题上加上【已解决】

whitehead 发表于 2012-5-8 22:29:50

编辑帖子在标题上加上【已解决】也是对帮助者的尊重

MicroBlue 发表于 2012-5-8 23:10:50

这个 问题如果看看帮助文档也能搞定。。。。

Qokelate 发表于 2012-5-12 17:21:54

本帖最后由 Qokelate 于 2012-5-12 17:39 编辑

回复 2# netegg


    这方法并非好办法,因为枚举不包含 (默认) 键,这方法得到的结果不具备客观性,事实上,项存在,也可能仅存在 (默认) 键!!本人推荐的方法是使用 _WinAPI_RegQueryLastWriteTime()如果能得到创建时间说明存在,反之则不存在,或者用 _WinAPI_RegOpenKey()

lxzan 发表于 2012-5-12 17:23:20

想学习注册表代码.

netegg 发表于 2012-5-12 18:04:37

本帖最后由 netegg 于 2012-5-12 18:10 编辑

回复 7# Qokelate
谁告诉你不包含默认键,不过懒得写了,那个索引好像是0或-1,另外你指的应该是默认值吧,不是键

Qokelate 发表于 2012-5-12 18:27:37

回复 9# netegg


    好吧,————   囧

PS:你用Enum方法找出 默认 的索引号我看看

netegg 发表于 2012-5-12 19:42:20

回复 10# Qokelate
只写了一部分,没有子键的二级子键
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

Qokelate 发表于 2012-5-13 00:17:19

很好,通过枚举得到的健肯定是存在的,但反过来,按楼主要求是进行判断是否存在的话就没多大作用了

netegg 发表于 2012-5-13 02:48:20

本帖最后由 netegg 于 2012-5-13 02:55 编辑

回复 12# Qokelate

怎么会没用呢,只是效率可能低了些
其实,如果lz这个问题,如果是指定键名或值的话,应该更简单
RegRead ( "键名", "值项")
if @error<> 0then
判断下@error值就行了
返回空字符串 "",并把 @error 设为以下值之一:
1 如果不能打开被请求的键
2 如果不能打开被请求的主键
3 如果不能远程连接到注册表
-1 如果不能打开被请求的值
-2 如果值的类型是不支持的

qq82015930 发表于 2012-6-8 01:11:29

呵呵楼主跑拉{:face (114):}
页: [1]
查看完整版本: 请问如何判断一个注册表的键值是否存在