请问如何判断一个注册表的键值是否存在
例如如何读取这个键值是否存在?"HKEY_CLASSES_ROOT\Installer\Products\c1c4f01781cc94c4c8fb1542c0981a2a"
如果存在,执行1。EXE,不存在执行2。EXE。但是我RegRead没法读取,请问该如何判断呢? 本帖最后由 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 谢谢,已经成功运行~ 问题解决了请结贴,看楼的问题都不结贴的。
结贴方法:重新编辑帖子在标题上加上【已解决】 编辑帖子在标题上加上【已解决】也是对帮助者的尊重 这个 问题如果看看帮助文档也能搞定。。。。 本帖最后由 Qokelate 于 2012-5-12 17:39 编辑
回复 2# netegg
这方法并非好办法,因为枚举不包含 (默认) 键,这方法得到的结果不具备客观性,事实上,项存在,也可能仅存在 (默认) 键!!本人推荐的方法是使用 _WinAPI_RegQueryLastWriteTime()如果能得到创建时间说明存在,反之则不存在,或者用 _WinAPI_RegOpenKey() 想学习注册表代码. 本帖最后由 netegg 于 2012-5-12 18:10 编辑
回复 7# Qokelate
谁告诉你不包含默认键,不过懒得写了,那个索引好像是0或-1,另外你指的应该是默认值吧,不是键 回复 9# netegg
好吧,———— 囧
PS:你用Enum方法找出 默认 的索引号我看看 回复 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
很好,通过枚举得到的健肯定是存在的,但反过来,按楼主要求是进行判断是否存在的话就没多大作用了 本帖最后由 netegg 于 2012-5-13 02:55 编辑
回复 12# Qokelate
怎么会没用呢,只是效率可能低了些
其实,如果lz这个问题,如果是指定键名或值的话,应该更简单
RegRead ( "键名", "值项")
if @error<> 0then
判断下@error值就行了
返回空字符串 "",并把 @error 设为以下值之一:
1 如果不能打开被请求的键
2 如果不能打开被请求的主键
3 如果不能远程连接到注册表
-1 如果不能打开被请求的值
-2 如果值的类型是不支持的 呵呵楼主跑拉{:face (114):}
页:
[1]