找回密码
 加入
搜索
查看: 2941|回复: 25

请教怎么实现删除注册表某项下的几个指定项之外的其他项

[复制链接]
发表于 2009-6-30 09:15:51 | 显示全部楼层 |阅读模式
本帖最后由 drunk 于 2009-11-30 17:40 编辑

我根据上次一个论坛朋友写的删除注册表1个指定值外地其他值改成了这样
但我改了不能执行
因为我现在是要指定多项而删除指定项之外的项
所以我就想到了数组
我不知道是因为数组不支持还是没执行删除项
代码如下,望高手点解下
$i = 1
Dim $dr[6] = ["00000409","00000804","00020409","E0040804","E0200804","E0210804"]
While 1
If @error <> 0 then ExitLoop
;$key2=RegRead('HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',$key)
$i=$i+1
$Compare=StringCompare($key,$dr[6], 2)
If  $Compare = 1 Then
RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layouts", $key) 
EndIf
WEnd
 楼主| 发表于 2009-6-30 10:21:32 | 显示全部楼层
别沉啊
 楼主| 发表于 2009-6-30 11:57:49 | 显示全部楼层
上去啊
 楼主| 发表于 2009-6-30 11:59:57 | 显示全部楼层
本帖最后由 drunk 于 2009-6-30 12:01 编辑

现在确定是我定义的数组的问题了
comepare不能与数组比较
那到底应该怎么比较呢,有没高手指点下啊
$i = 1
Dim $d[3] = ["a","b","c"]
While 1
$key=RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl",$i)
If @error <> 0 then ExitLoop
$i=$i+1
$Compare=StringCompare($key,$d, 2)
If  $Compare <> 0 Then
RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl"&$key) 
EndIf
WEnd
 楼主| 发表于 2009-6-30 12:32:03 | 显示全部楼层
改来改去还是不行,哪位帮帮忙啊
现在我改成这样了,还是不行啊
$i = 1
Dim $d[3]
$d[1]='a'
$d[2]='b'
$d[3]='c'
While 1
$key=RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl",$i)
If @error <> 0 then ExitLoop
$i=$i+1
        For $d = 1 To 3
                Next
        $Compare=StringCompare($key,$d, 2)
        If  $Compare <> 0 Then
                        RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl"&$key)
                EndIf
WEnd
发表于 2009-6-30 13:00:21 | 显示全部楼层
RegEnumVal       搜索下帮助文件
发表于 2009-6-30 13:01:26 | 显示全部楼层
1.RegEnumKey ( "键名", 序数 ) :读取指定子键的名称.
2.RegEnumVal ( "键名", 序数 ) :读取指定值项的名称.       
3.RegRead ( "键名", "值项" ):读取注册表指定的值.
从你的描述好像是读取方式2,但你用的3,读取最终数值的。
打开注册表:
1是读取注册表左边一栏的各个子键名称
2是读取1中某个子键在右边栏位的各个键值名
3是读取2的指定键值名的值
发表于 2009-6-30 13:15:01 | 显示全部楼层
这好像是输入法吧
发表于 2009-6-30 13:17:48 | 显示全部楼层
本帖最后由 afan 于 2009-6-30 13:19 编辑
Dim $dr[6] = ["00000409", "00000804", "00020409", "E0040804", "E0200804", "E0210804"]
$i = 1
While 1
        $key = RegEnumKey('HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layouts', $i)
        If @error <> 0 then ExitLoop
        for $n = 0 to 5
                If $key = $dr[$n] Then
                        ;RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layouts" & $key)
                        msgbox(0, $n, $key)
                EndIf
        next
        $i = $i + 1
WEnd
 楼主| 发表于 2009-6-30 13:45:30 | 显示全部楼层
哈哈 ,终于又自己解决啦
感觉这个方法不太科学
但总算能解决问题而且不会出错
现在还有个问题就是每次运行后都不能清楚完
值隔一项清1项,不知道为什么
好比一共要清掉8项,那么第一次只清掉4项,第二次清掉2项,第三次清掉1项,第四次才清完
所以如果项比较多的话要这脚本复制很多次让脚本重复运行才能完成,
不知道问题出在哪,谁知道的话告知下,3Q
代码如下:
$a="b"
$d='a'
$c="c"

For $i = 1 To 100
$key=RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl",$i)
        $Compare1=StringCompare($key,$a, 2)
                $Compare2=StringCompare($key,$d, 2)
                $Compare3=StringCompare($key,$c, 2)
        If  $Compare1*$Compare2*$Compare3 <> 0 Then
                        RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl"&$key)
                EndIf
If @error <> 0 then ExitLoop
Next
 楼主| 发表于 2009-6-30 13:45:45 | 显示全部楼层
哈哈 ,终于又自己解决啦
感觉这个方法不太科学
但总算能解决问题而且不会出错
现在还有个问题就是每次运行后都不能清楚完
值隔一项清1项,不知道为什么
好比一共要清掉8项,那么第一次只清掉4项,第二次清掉2项,第三次清掉1项,第四次才清完
所以如果项比较多的话要这脚本复制很多次让脚本重复运行才能完成,
不知道问题出在哪,谁知道的话告知下,3Q
代码如下:
$a="b"
$d='a'
$c="c"

For $i = 1 To 100
$key=RegEnumKey("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl",$i)
        $Compare1=StringCompare($key,$a, 2)
                $Compare2=StringCompare($key,$d, 2)
                $Compare3=StringCompare($key,$c, 2)
        If  $Compare1*$Compare2*$Compare3 <> 0 Then
                        RegDelete("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\PriorityControl"&$key)
                EndIf
If @error <> 0 then ExitLoop
Next
 楼主| 发表于 2009-6-30 13:49:36 | 显示全部楼层
晕,不好意思哦
好久没刷新页面,以为没人回答
我现在去试下楼上的朋友的代码看行不
先谢谢你们的回答了
 楼主| 发表于 2009-6-30 14:03:48 | 显示全部楼层
刚仔细研究了下9楼"afan"朋友提供的方法
我也觉得应该没问题
但我执行时发现不行,是无选择的乱删的
而且也是一次删掉一半的那种
后来我发现"If $key = $dr[$n] Then delete..."这句有问题
应该是"If $key <> $dr[$n] Then delete...",但改了之后还是乱删
不知道到底为什么,可能是数组的问题吧,唉
 楼主| 发表于 2009-6-30 14:04:00 | 显示全部楼层
刚仔细研究了下9楼"afan"朋友提供的方法
我也觉得应该没问题
但我执行时发现不行,是无选择的乱删的
而且也是一次删掉一半的那种
后来我发现"If $key = $dr[$n] Then delete..."这句有问题
应该是"If $key <> $dr[$n] Then delete...",但改了之后还是乱删
不知道到底为什么,可能是数组的问题吧,唉
发表于 2009-6-30 14:15:59 | 显示全部楼层
For $i= 1 to 9999
$box = RegEnumKey('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP4',$i)

If @error <> 0 then ExitLoop
FileWriteLine('test.txt',$box)
;msgbox(64,'',$box)
Next

不知道对你有没有帮助!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-14 03:16 , Processed in 0.082223 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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