找回密码
 加入
搜索
查看: 1817|回复: 12

如何搜索注册表匹配值,详情请进

[复制链接]
发表于 2009-7-22 17:07:45 | 显示全部楼层 |阅读模式
本帖最后由 xg911335 于 2009-7-23 12:58 编辑

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下有个名为“测试用”的KEY,里面有个Val是"installPath"="D:\\123\\测试用1.0.1.45-ID测试"的路劲值。
现在的问题是,“测试用”这个KEY(项)有个变化,变化如下:

测试用1.0.1.45-ID测试
测试用1.0 - ID测试(含空格)
测试用1.0 - ID(含空格)
测试用1-0-1-45-ID测试(含空格)

但不管怎么变化,前3个字不变。
现在怎么才能读取这个变化的KEY(项)里Val(值)的路径呢?


我自己认为是做个循环读取UNINSTALL里的KEY,在用正则来匹配KEY........................................................但代码上不知道怎么写。
For $i= 1 to 20
           $t = "测试用"
           $var = RegEnumKey("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $i)
           If @error <> 0 then ExitLoop
           if $var = StringRegExp($t,""&$i&"问号",3) Then
                  。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。代码
           EndIf
   Next
谁能帮我写一段这样的代码,也当给我个列子吧。先谢过了
发表于 2009-7-22 17:39:07 | 显示全部楼层
何必用正则。。。。用STRINGLEFT
发表于 2009-7-22 17:42:04 | 显示全部楼层
For $i = 1 to 300
        $var = RegEnumKey("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $i)
        If @error <> 0 then ExitLoop
        If StringLeft($var,3) = "测试用" then
                $p = RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" & $var, "installPath")
                msgbox(0, $i, $p)
        EndIf
Next
发表于 2009-7-22 17:44:51 | 显示全部楼层
本帖最后由 netegg 于 2009-7-22 17:48 编辑

用for不大合适吧,while 1可能好些
发表于 2009-7-22 17:50:16 | 显示全部楼层
本帖最后由 lynfr8 于 2009-7-22 18:30 编辑

用while比较方便点
发表于 2009-7-22 18:11:51 | 显示全部楼层
本帖最后由 afan 于 2009-7-22 18:24 编辑
$i = 1
While 1
        $var = RegEnumKey("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $i)
        If @error <> 0 then ExitLoop
        If StringLeft($var,3) = "测试用" then
        ;If StringInStr($var,"测试用",0,1,1) <> 0  then ;也可用这句
        ;If StringRegExp($var,"测试用(.*)",3) <> 1 then  ;或者也可用这句
                $p = RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" & $var, "installPath")
                msgbox(0, $i, $p)
        EndIf
        $i = $i + 1
WEnd
都行~
 楼主| 发表于 2009-7-23 10:54:20 | 显示全部楼层
本帖最后由 xg911335 于 2009-7-23 10:55 编辑

非常感谢楼上的所有兄弟。受益良多。
怎么还要$i = $i + 1呢?
发表于 2009-7-23 11:22:21 | 显示全部楼层
给下个循环传递个变量,不然就死循环了
 楼主| 发表于 2009-7-23 11:34:24 | 显示全部楼层
感谢afan兄。
另外在问一下。。
如果我读取的是:比如"C:\Program Files\newsoft\new.exe"的值,那么如何让它返回的路径像这样呢"C:\Program Files\newsoft\"???
发表于 2009-7-23 11:56:20 | 显示全部楼层
$i = 1
While 1
        $var = RegEnumKey("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $i)
        If @error <> 0 then ExitLoop
        If StringLeft($var,3) = "测试用" then
                $p = RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" & $var, "installPath")
                $str = stringRegExp($p, ".*\", 1)
                msgbox(0, $i, $str[0])
        EndIf
        $i = $i + 1
WEnd

评分

参与人数 1贡献 +5 收起 理由
lynfr8 + 5 很热心...

查看全部评分

 楼主| 发表于 2009-7-23 12:17:44 | 显示全部楼层
非常感谢。最后在问一个小问题。
msgbox(0, $i, $str[0])
这个为要家[0]呢?
发表于 2009-7-23 12:29:31 | 显示全部楼层
因为 stringRegExp 返回的是数组,呵呵
 楼主| 发表于 2009-7-23 12:57:49 | 显示全部楼层
感谢。。。呵呵。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-2 16:14 , Processed in 0.085389 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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