【问题标题】:Is there a more elegant way to get the Internet Expolor version with AutoIt有没有更优雅的方式来使用 AutoIt 获取 Internet Explorer 版本
【发布时间】:2019-02-10 12:54:38
【问题描述】:

总结:

我正在寻找一种更优雅的方式来在 Windows 计算机上获取 Internet Explorer (IE) 版本(尤其是使用 AutoIt,因为已编译 *.exe)。我目前的解决方案(如下)可以完成这项工作,但也许有更好的方法使用纯 AutoIt 函数(UDF)?

背景和目标:

我必须检查特定的 IE 版本,通常是低于 11 (11.0.9600) 的版本。

我必须检查大约 60 台设备(服务器、笔记本电脑等)。编译后的 *.exe 将找到版本并将该信息的条目(除了主机名等其他信息)设置为一个小的 HTML 报告。远程处理和执行不是问题。

代码:

#include-once
#include <Array.au3>

Func _getFileProperties( $sDirectory, $sFileName, $bRemoveEmptyLines = True )
    Local $oShellApp           = ObjCreate( 'Shell.Application' )
    Local $oFolder             = $oShellApp.NameSpace( $sDirectory )
    Local $oFolderItem         = $oFolder.Parsename( $sFileName )
    Local $aPropertyList[1][2] = [[1]]

    For $i = 0 To 400 Step 1
        If $oFolder.GetDetailsOf( $oFolder.Items, $i ) Then
            ReDim $aPropertyList[$aPropertyList[0][0] + 1][2]
            $aPropertyList[$aPropertyList[0][0]][0] = $oFolder.GetDetailsOf( $oFolder.Items, $i )
            $aPropertyList[$aPropertyList[0][0]][1] = $oFolder.GetDetailsOf( $oFolderItem, $i )
            $aPropertyList[0][0] += 1
        EndIf
    Next
    _ArraySort( $aPropertyList, 0, 1, 0 )

    If $bRemoveEmptyLines Then
        For $i = $aPropertyList[0][0] - 1 To 1 Step - 1
            If $aPropertyList[$i][1] == '' Then _ArrayDelete( $aPropertyList, $i )
        Next
    EndIf

    $aPropertyList[0][0] = UBound( $aPropertyList, 1 ) - 1
    Return $aPropertyList
EndFunc

Global $aPropertyList = _getFileProperties( @SystemDir, 'ieframe.dll' )
_ArrayDisplay( $aPropertyList )

当前结果:

当然我会根据我的搜索条件过滤数组(没问题)。

预期结果:

与上述(当前结果)基本相同,但可能以更快的方式并且还具有 AutoIt 自己/本机功能?因为这只是将要收集的许多其他信息的一个步骤,因此我尝试减少代码并提高未来编辑的可读性。

请注意,我可以检查
_getFileProperties( @SystemDir, 'ieframe.dll' )
_getFileProperties( $sPathIe, 'iexplore.exe' )
两者都提供版本信息。

是否有其他方式,更优雅和 AutoIt 自己/本机功能来实现我的目标?

【问题讨论】:

  • FileGetVersion("c:\Program Files (x86)\Internet Explorer\iexplore.exe","ProductVersion")?
  • 谢谢@Stephan。老实说,我不知道这种可能性(功能)。但不幸的是,该函数返回一个不同的版本,然后是我的属性解决方案。 11.00.9600.19236(属性)与 11.00.9600.16428(FileGetVersion)。我将比较其他计算机(服务器、笔记本电脑等)的结果。

标签: internet-explorer autoit comobject


【解决方案1】:

您也可以尝试检查注册表详细信息以验证 IE 版本。希望这可以帮助您以其他方式找到它。

;Internet Explorer version is
Global $svcVersion = (RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer", "svcVersion"))
If $svcVersion <> "" Then
    MsgBox(1, "internet Explorer Version" , "Internet Explorer version is: " & $svcVersion)
Endif

;Internet Explorer updated version is
Global $svcUpdateVersion = (RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer", "svcUpdateVersion"))
If $svcUpdateVersion <> "" Then
    MsgBox(1, "internet Explorer Version" , "Internet Explorer updated version is: " & $svcUpdateVersion)
Endif

【讨论】:

  • 我必须在其他计算机(服务器、笔记本电脑等)上尝试一下。但是 svcVersion 是一种可行的方法,它可以为我提供正确的版本,例如 11.00.9600.19236
  • 很高兴知道这就是您所关心的。
猜你喜欢
  • 2012-08-31
  • 1970-01-01
  • 2016-01-23
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多