找回密码
 加入
搜索
查看: 2127|回复: 3

[系统综合] 已关闭 表达式出错了,求高手

[复制链接]
发表于 2010-10-29 09:19:06 | 显示全部楼层 |阅读模式
本帖最后由 wgboy 于 2010-12-7 10:50 编辑

请大大们看看,这个要怎么更改
错误: 表达式错误
$oReg.EnumKey $hkey
~~~~~~~~~~~~~~^
const $hkey = "&H80000002" 
Const $REG_SZ = 1
softlist()
Func softlist()
                
;StdOut = WScript.StdOut 
$host="."
$oReg=ObjGet("winmgmts:{impersonationLevel=impersonate}!\" &$host& "\root\default:StdRegProv") 

$strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Uninstall" 
$oReg.EnumKey $hkey, $strKeyPath, $arrSubKeys 
;RegEnumKey($strroot&""&$strKeyPath,$arrSubKeys)
For $strSubKey In $arrSubKeys 
        If NotHotfix($strSubKey) Then                
                $SoftNameAndVersion = getProgNameAndVersion($oReg,$strKeyPath & "" & $strSubKey)
                If $SoftNameAndVersion<>"0" Then 
                ConsoleWrite("软件"&$SoftNameAndVersion)             
                EndIf 
        EndIf
Next                 
EndFunc

Func NotHotfix($sSubKey)        
        If StringLeft($sSubkey,2) = "KB" And StringLen($sSubkey) = 8 Then
                NotHotfix = 0
        Else NotHotfix = 1
        Endif
        EndFunc
        
Func getProgNameAndVersion($oReg,$sKeyRoot)
Dim $sKeyValuesAry, $iKeyTypesAry, $nCnt, $sValue, $sDisplayName, $sDisplayVersion
$oReg.EnumValues $hkey, $sKeyRoot, $sKeyValuesAry, $iKeyTypesAry
        If NOT IsArray($sKeyValuesAry) Then 
                getProgNameAndVersion = 0
                Exit Func 
        EndIf

        For $nCnt = 0 To UBound($sKeyValuesAry)
                If StringInStr(1, $sKeyValuesAry($nCnt), "DisplayName") Then
                        If $iKeyTypesAry($nCnt) = $REG_SZ Then
                                $oReg.GetStringValue $hkey, $sKeyRoot, $sKeyValuesAry($nCnt), $sValue
                                If $sValue<>"" Then 
                                        $sDisplayName = $sValue                                
                                        $sDisplayName = StringReplace($sDisplayName, "[", "(")
                                        $sDisplayName = StringReplace($sDisplayName, "]", ")")
                                EndIf
                        EndIf
                ElseIf StringInStr(1, $sKeyValuesAry($nCnt), "DisplayVersion") Then
                        If $iKeyTypesAry($nCnt) = $REG_SZ Then
                                $oReg.GetStringValue $hkey, $sKeyRoot, $sKeyValuesAry($nCnt), $sValue
                                If $sValue<>"" Then $sDisplayVersion = $sValue
                        EndIf
                EndIf

                If ($sDisplayName<>"") AND ($sDisplayVersion<>"") Then 
                        getProgNameAndVersion = $sDisplayName & " --版本号: " & $sDisplayVersion
                        Exit Func
                Else         getProgNameAndVersion = 0                        
                EndIf
        Next

        If $sDisplayName<>"" Then 
                getProgNameAndVersion = $sDisplayName
                Exit Func                                       
        EndIf
EndFunc
发表于 2010-10-29 09:45:33 | 显示全部楼层
不知道你从那里copy来的文件,

你这个文件不止一个地方错,n多错误,

兄弟,你要想用AU3还是自己学习一下,

copy来copy去,没有一点意义。
 楼主| 发表于 2010-10-29 10:10:40 | 显示全部楼层
这是我根据VBS脚本改的,不是Copy的。就是因为有问题所以才求救。其实用下面的脚本也可以实现取软件安装列表,但是反应速度很慢。
$i = 1
while 1
$key = regenumkey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", $i)
if @error then exitloop
$softname=RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"&$key,"DisplayName")
If @error<>-1 Then
If StringLeft($key, 2)<>"KB"  And StringLeft($softname, 8)<>"Security" And $softname<>"" Then
ConsoleWrite("软件"&$softname)

EndIf
EndIf
$i = $i +1
wend
发表于 2010-10-29 15:37:37 | 显示全部楼层
这是我根据VBS脚本改的,不是Copy的。就是因为有问题所以才求救。其实用下面的脚本也可以实现取软件安装列表 ...
wgboy 发表于 2010-10-29 10:10



   这就难怪了,里面好多语法错误,
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 10:12 , Processed in 0.077439 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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