但是我在我的机器上编译后不就包含了winapiex.au3 吗?拿到他机器不就好使吗,我 去试一下.
非常感谢您的回复. 本帖最后由 newuser 于 2010-9-27 09:37 编辑
回复 15# 3mile
但是我在我的机器上编译后不就包含了winapiex.au3 吗?拿到他机器不就好使吗,我 去试一下.
非常感谢您的回复.
能否提供一个新的WINAPIEX.AU3,我的WINAPIEX.AU3一编译就有错误呢,我将他复制到autoit安装目录下的Include目录下? 回复 17# newuser
http://www.autoitscript.com/forum/index.php?app=core&module=attach§ion=attach&attach_id=31907 回复 15# 3mile
问题依旧,见图:
他的系统是:XP SP3,注册表键存在,我已将下载的WinAPIex拷贝到 autoit的include目录下. 回复 19# newuser
这就很奇怪了啊。
你在第30行增加一句 _ArrayDisplay($Count)看下$count的值。
看注册表中有SP0,SP4。应该有三处回显吧。抓个图上来看下。 回复 20# 3mile
网络总断! 本帖最后由 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 Then
Dim $aKey[$Count]
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
本帖最后由 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]
While1
$j +=1
$EnumResult=RegEnumKey($CommonReg,$j)
If @error <> 0ThenExitLoop
;$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"))
页:
1
[2]