找回密码
 加入
搜索
楼主: newuser

[系统综合] [已解决]请帮助找出以下代码的错误?

  [复制链接]
 楼主| 发表于 2010-9-27 09:26:54 | 显示全部楼层
回复 15# 3mile
但是我在我的机器上编译后不就包含了winapiex.au3 吗?拿到他机器不就好使吗,我 去试一下.
非常感谢您的回复.
 楼主| 发表于 2010-9-27 09:36:07 | 显示全部楼层
本帖最后由 newuser 于 2010-9-27 09:37 编辑

回复 15# 3mile
但是我在我的机器上编译后不就包含了winapiex.au3 吗?拿到他机器不就好使吗,我 去试一下.
非常感谢您的回复.
能否提供一个新的WINAPIEX.AU3,我的WINAPIEX.AU3一编译就有错误呢,我将他复制到autoit安装目录下的Include目录下?
发表于 2010-9-27 09:37:44 | 显示全部楼层
 楼主| 发表于 2010-9-27 14:42:19 | 显示全部楼层
回复 15# 3mile
问题依旧,见图:

他的系统是:XP SP3,注册表键存在,我已将下载的WinAPIex拷贝到 autoit的include目录下.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-9-27 16:42:11 | 显示全部楼层
回复 19# newuser
这就很奇怪了啊。
你在第30行增加一句        _ArrayDisplay($Count)看下$count的值。
看注册表中有SP0,SP4。应该有三处回显吧。抓个图上来看下。
 楼主| 发表于 2010-9-28 08:39:19 | 显示全部楼层
回复 20# 3mile
网络总断!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-9-28 09:17:33 | 显示全部楼层
本帖最后由 3mile 于 2010-9-28 09:30 编辑

回复 21# newuser
你只给出了第8行的回显图,没看到第30行的回显啊。
试下这个:
#include <Array.au3>
#include <WinAPIEx.au3>

Local $hKey, $Count, $Num = 0
Local $Vkey = 'SOFTWARE\Microsoft\Updates\Windows XP'
Local $aKey
$array = EnumKey($Vkey)
;~ _ArrayDisplay($array)
If UBound($array) > 0 Then
        For $i = 0 To UBound($array) - 1
                $Wkey = $Vkey & '\' & $array[$i]
                $keyArray = EnumKey($Wkey)
                _ArrayDisplay($keyArray)
                If UBound($keyArray) > 0 Then
                        For $n = 0 To UBound($keyArray) - 1
                                IniWrite("hotfixed.ini", "hotfixed", $keyArray[$n], "1")
                        Next
                EndIf
        Next
EndIf

Func EnumKey($Key)
        $hKey = _WinAPI_RegOpenKey($HKEY_LOCAL_MACHINE, $Key)
        $Count = _WinAPI_RegQueryInfoKey($hKey)
;~         _ArrayDisplay($Count)
        If $Count[0] > 0 Then
                Dim $aKey[$Count[0]]
                For $i = 0 To UBound($aKey) - 1
                        $aKey[$i] = _WinAPI_RegEnumKey($hKey, $i)
                Next
;~         ElseIf StringRegExp($key,'KB\d+',0) Then;如果KB941569需要的话加上31-33行
;~                 $aKey=StringRegExp($key,'KB\d+',3)
        EndIf
        _WinAPI_RegCloseKey($hKey)

        If Not IsArray($aKey) Then
                Return -1
        Else
                Return $aKey
        EndIf
EndFunc   ;==>EnumKey

评分

参与人数 1金钱 +30 收起 理由
newuser + 30 非常感谢!不过怎么不是所有的机器都出现:数 ...

查看全部评分

 楼主| 发表于 2010-9-28 10:09:30 | 显示全部楼层
本帖最后由 newuser 于 2010-9-28 10:18 编辑

回复 22# 3mile
加了个if判断,作用这么大!!!没想到!!!!!!
另外,请帮忙看以下代码,找的数据没有老大给的代码找的全.
#cs
新增对分支HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates的枚举,以下都是该分支下的分支(注意有 XP和WinServer2003):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP3
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP4
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows Server 2003\SP10
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows Server 2003\SP2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows Server 2003\SP3

问题1:2003下的SP10有1个KB文件,SP2有1个,SP3 下有150,可实际只枚举出148个?SP2下的那个KB文件一直没有枚举出来?
分析:与 3mile对比,它的更准,我的这个总少枚举了!
#ce
#include <File.au3>
#include <array.au3>
Dim  $i,$Array,$j
Dim  $CommonReg,$EnumResult
If FileExists(@ScriptDir&"\EnumList.ini") Or FileExists(@ScriptDir&"\FixedPatchsList2.ini")  Then 
    FileDelete(@ScriptDir&"\EnumList.ini")
        FileDelete(@ScriptDir&"\FixedPatchsList2.ini")
EndIf
If @OSVersion="WIN_XP" Then
        IniWrite(@ScriptDir&"\EnumList.ini","枚举注册表路径","HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP0","1")
        IniWrite(@ScriptDir&"\EnumList.ini","枚举注册表路径","HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP2","1")
        IniWrite(@ScriptDir&"\EnumList.ini","枚举注册表路径","HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP3","1")
        IniWrite(@ScriptDir&"\EnumList.ini","枚举注册表路径","HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP4","1")
ElseIf @OSVersion="WIN_2003" Then
        IniWrite(@ScriptDir&"\EnumList.ini","枚举注册表路径","HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows Server 2003\SP10","1")
        IniWrite(@ScriptDir&"\EnumList.ini","枚举注册表路径","HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows Server 2003\SP2","1")
        IniWrite(@ScriptDir&"\EnumList.ini","枚举注册表路径","HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows Server 2003\SP3","1")
Else 
        MsgBox(0,"","抱歉,目前你的系统还不被支持!")
EndIf
$Array=IniReadSection(@ScriptDir&"\EnumList.ini","枚举注册表路径")
If @error Then
        
Else
        For $i=0 To UBound($Array)-1
                $CommonReg=$Array[$i][0]
                While  1
                        $j +=1
                $EnumResult=RegEnumKey($CommonReg,$j)
                If @error <> 0  Then  ExitLoop
                ;$KBString = StringRegExpReplace($EnumResult, '.*?(KB\d+)[^\d]*?.*', '$1')
                    ;If @extended > 0 Then IniWrite(@ScriptDir&"\FixedPatchsList2.ini","已安装补丁列表",$KBString,"1")
                        IniWrite(@ScriptDir&"\FixedPatchsList2.ini","已安装补丁列表",$EnumResult,"1")                        
        WEnd
    Next
EndIf
MsgBox(0,'',_FileCountLines(@ScriptDir&"\FixedPatchsList2.ini"))
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-3 04:40 , Processed in 0.086477 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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