Board logo

标题: [技术讨论] vbs获取系统/IE/DirectX/MediaPlaye/Flash插件/MSXML及各种运行库的版本及安装情况 [打印本页]

作者: czjt1234    时间: 2014-5-7 22:01     标题: vbs获取系统/IE/DirectX/MediaPlaye/Flash插件/MSXML及各种运行库的版本及安装情况

本帖最后由 pcl_test 于 2016-9-13 16:24 编辑

请测试
  1. Wscript.Echo QueryWinVer()   & vbCrLf & QueryDirectX()  & vbCrLf & _
  2.              QueryIEVer()    & vbCrLf & QueryFlashVer() & vbCrLf & _
  3.              QueryMediaVer() & vbCrLf & QueryVC20xx()   & vbCrLf & _
  4.              QueryXML()      & vbCrLf & QueryNET()
  5. 'By QQ20147578 2014-05-03
  6. Function QueryWinVer()
  7.     '查询WMI的Win32_OperatingSystem和Win32_ComputerSystem,读取操作系统版本
  8.     Dim objSWbemServices, objSWbemObject
  9.     Set objSWbemServices = GetObject("Winmgmts:\\.\Root\Cimv2")
  10.     For Each objSWbemObject In objSWbemServices.InstancesOf("Win32_OperatingSystem")
  11.         QueryWinVer = objSWbemObject.Caption & " " & objSWbemObject.CSDVersion
  12.     Next
  13.     QueryWinVer = QueryWinVer & vbCrLf
  14.     For Each objSWbemObject In objSWbemServices.InstancesOf("Win32_ComputerSystem")
  15.         If InStr(objSWbemObject.SystemType, "86") > 0 Then
  16.             QueryWinVer = QueryWinVer & "32位 操作系统"
  17.         ElseIf InStr(objSWbemObject.SystemType, "64") > 0 Then
  18.             QueryWinVer = QueryWinVer & "64位 操作系统"
  19.         Else
  20.             QueryWinVer = QueryWinVer & objSWbemObject.SystemType
  21.         End If
  22.     Next
  23.     QueryWinVer = QueryWinVer & vbCrLf
  24. End Function
  25. Function QueryDirectX()
  26.     '读取C:\Windows\System32\dxdiag.exe的文件版本,判断DirectX版本
  27.     '读取C:\Windows\System32\XAudio2_7.dll的文件版本,判断DirectX最终用户运行时版本
  28.     Dim s, objFSO, objWshShell
  29.     Set objFSO      = CreateObject("Scripting.FileSystemObject")
  30.     Set objWshShell = CreateObject("Wscript.Shell")
  31.     s = objWshShell.ExpandEnvironmentStrings("%SystemRoot%\System32\dxdiag.exe")
  32.     If objFSO.FileExists(s) = False Then
  33.         QueryDirectX = "未能找到 dxdiag.exe 文件,DirectX 版本 查询失败"
  34.     Else
  35.         s = objFSO.GetFileVersion(s)
  36.         If s < "4.09.00.0904" Then
  37.             QueryDirectX = "DirectX 版本 低于 DirectX 9.0C"
  38.         ElseIf s < "6.0" Then
  39.             QueryDirectX = "DirectX 9.0C"
  40.         ElseIf s < "6.1" Then
  41.             QueryDirectX = "DirectX 10"
  42.         Else
  43.             QueryDirectX = "DirectX 11"
  44.         End If
  45.     End If
  46.     QueryDirectX = QueryDirectX & vbCrLf
  47.     s = objWshShell.ExpandEnvironmentStrings("%SystemRoot%\System32\XAudio2_7.dll")
  48.     If objFSO.FileExists(s) = False Then
  49.         QueryDirectX = QueryDirectX & "DirectX 最终用户运行时 2010.6 未安装"
  50.     ElseIf objFSO.GetFileVersion(s) = "9.29.1962.0" Then
  51.         QueryDirectX = QueryDirectX & "DirectX 最终用户运行时 2010.6 已安装"
  52.     Else
  53.         QueryDirectX = QueryDirectX & "DirectX 最终用户运行时 已安装 版本未知"
  54.     End If
  55.     QueryDirectX = QueryDirectX & vbCrLf
  56. End Function
  57. Function QueryIEVer()
  58.     '读取C:\Program Files\Internet Explorer\iexplore.exe的文件版本,判断IE版本
  59.     '如果读取注册表,注意IE6~11的版本号分别是6.0  7.0  8.0  9.0  9.10  9.11
  60.     Dim s, objFSO, objWshShell
  61.     Set objFSO      = CreateObject("Scripting.FileSystemObject")
  62.     Set objWshShell = CreateObject("Wscript.Shell")
  63.     s = objWshShell.ExpandEnvironmentStrings("%ProgramFiles%\Internet Explorer\iexplore.exe")
  64.     If objFSO.FileExists(s) = False Then
  65.         QueryIEVer = "未能找到 iexplore.exe 文件,Internet Explorer 版本 查询失败"
  66.     Else
  67.         s = Split(objFSO.GetFileVersion(s), ".")
  68.         QueryIEVer = "Internet Explorer " & s(0)
  69.     End If
  70.     QueryIEVer = QueryIEVer & vbCrLf
  71. End Function
  72. Function QueryMediaVer()
  73.     '读取C:\Program Files\Windows Media Player\wmplayer.exe的文件版本,判断MediaPlayer版本
  74.     Dim s, objFSO, objWshShell
  75.     Set objFSO      = CreateObject("Scripting.FileSystemObject")
  76.     Set objWshShell = CreateObject("Wscript.Shell")
  77.     s = objWshShell.ExpandEnvironmentStrings("%ProgramFiles%\Windows Media Player\wmplayer.exe")
  78.     If objFSO.FileExists(s) = False Then
  79.         QueryMediaVer = "未能找到 wmplayer.exe 文件,MediaPlayer 版本 查询失败"
  80.     Else
  81.         s = Split(objFSO.GetFileVersion(s), ".")
  82.         QueryMediaVer = "Media Player " & s(0)
  83.     End If
  84.     QueryMediaVer = QueryMediaVer & vbCrLf
  85. End Function
  86. Function QueryFlashVer()
  87.     '查询HKLM\SOFTWARE\Macromedia\FlashPlayerActiveX\Version,判断Flash版本
  88.     '不要读取 "添加删除程序" 的注册表信息,比如win8.1集成Flash插件,Uninstall里面不显示
  89.     'Const HKEY_LOCAL_MACHINE = &H80000002
  90.     Dim s, objSWbemObject
  91.     Set objSWbemObject = GetObject("Winmgmts:\\.\Root\Default:StdRegProv")
  92.     objSWbemObject.GetStringValue &H80000002, "SOFTWARE\Macromedia\FlashPlayerActiveX", "Version", s
  93.     If IsNull(s) Then
  94.         QueryFlashVer = "Flash Player 版本 注册表查询 失败"
  95.     Else
  96.         QueryFlashVer = "Flash Player " & s
  97.     End If
  98.     QueryFlashVer = QueryFlashVer & vbCrLf
  99. End Function
  100. Function QueryVC20xx()
  101.     '读取 "添加删除程序" 里的 VC++ 运行库的安装信息
  102.     '注册表:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  103.     '注册表:HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
  104.     'Const HKEY_LOCAL_MACHINE = &H80000002
  105.     Dim s, sREG, sDis, sVer, i, j, arr, newarr, objReg
  106.     QueryVC20xx = ""
  107.     Set objReg = GetObject("Winmgmts:\\.\Root\Default:StdRegProv")
  108.     sREG = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
  109.     objReg.EnumKey &H80000002, sREG, s
  110.     If IsNull(s) = False Then
  111.         For i = 0 To Ubound(s)
  112.             If InStr(s(i), "{") > 0 Then
  113.                 objReg.GetStringValue &H80000002, sREG & "\" & s(i), "DisplayName", sDis
  114.                 If InStr(sDis, "Microsoft Visual C++") > 0 And InStr(sDis, "Redistributable") > 0 Then
  115.                     If InStr(sDis, "Microsoft Visual C++ 2005") > 0 Then
  116.                         objReg.GetStringValue &H80000002, sREG & "\" & s(i), "DisplayVersion", sVer
  117.                         QueryVC20xx = QueryVC20xx & sDis & " " & sVer & vbCrLf
  118.                     Else
  119.                         QueryVC20xx = QueryVC20xx & sDis & vbCrLf
  120.                     End If
  121.                 End If
  122.             End If
  123.         Next
  124.     End If
  125.     sREG = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
  126.     objReg.EnumKey &H80000002, sREG, s
  127.     If IsNull(s) = False Then
  128.         For i = 0 To Ubound(s)
  129.             If InStr(s(i), "{") > 0 Then
  130.                 objReg.GetStringValue &H80000002, sREG & "\" & s(i), "DisplayName", sDis
  131.                 If InStr(sDis, "Microsoft Visual C++") > 0 And InStr(sDis, "Redistributable") > 0 Then
  132.                     If InStr(sDis, "Microsoft Visual C++ 2005") > 0 Then
  133.                         objReg.GetStringValue &H80000002, sREG & "\" & s(i), "DisplayVersion", sVer
  134.                         QueryVC20xx = QueryVC20xx & sDis & " (x86) " & sVer & vbCrLf
  135.                     Else
  136.                         QueryVC20xx = QueryVC20xx & sDis & vbCrLf
  137.                     End If
  138.                 End If
  139.             End If
  140.         Next
  141.     End If
  142.     If QueryVC20xx = "" Then
  143.         QueryVC20xx = "未检测到 VC++ 运行库 安装信息" & vbCrLf
  144.         Exit Function
  145.     End If
  146.     '下面是排序,忽略大小写
  147.     arr = Split(QueryVC20xx, vbCrLf)
  148.     Redim newarr(UBound(arr))
  149.     newarr(0) = arr(0)
  150.     For i = 1 To UBound(arr)
  151.         For j = 0 To i
  152.             If Lcase(arr(i)) > Lcase(newarr(j)) Then
  153.                 s = newarr(j)
  154.                 newarr(j) = arr(i)
  155.                 arr(i) = s
  156.             End If
  157.         Next
  158.     Next
  159.     For i = 0 To UBound(arr)
  160.         arr(i) = newarr(UBound(arr) - i)
  161.     Next
  162.     '用VC替代Microsoft Visual C++,否则Win7系统显示字符数过多会自动换行
  163.     QueryVC20xx = "已安装VC运行库:" & RePlace(Join(arr, vbCrLf), "Microsoft Visual C++", "VC")
  164.     QueryVC20xx = QueryVC20xx & vbCrLf
  165. End Function
  166. Function QueryXML()
  167.     'MSXML3  HKCR\CLSID\{F5078F32-C551-11D3-89B9-0000F81FE221}
  168.     'MSXML4  HKCR\CLSID\{88D969C0-F192-11D4-A65F-0040963251E5}
  169.     'MSXML5  HKCR\CLSID\{88D969E5-F192-11D4-A65F-0040963251E5}
  170.     'MSXML6  HKCR\CLSID\{88d96a05-f192-11d4-a65f-0040963251e5}
  171.     '读取注册表,判断对应版本的MSXML的安装信息
  172.     'Const HKEY_CLASSES_ROOT = &H80000000
  173.     Dim s, sREG, objSWbemObject
  174.     QueryXML = ""
  175.     Set objSWbemObject = GetObject("Winmgmts:\\.\Root\Default:StdRegProv")
  176.     sREG = "CLSID\{F5078F32-C551-11D3-89B9-0000F81FE221}\InProcServer32"
  177.     objSWbemObject.GetStringValue &H80000000, sREG, "", s
  178.     If IsNull(s) Then
  179.         QueryXML = QueryXML & "MSXML 3   未安装" & vbCrLf
  180.     Else
  181.         QueryXML = QueryXML & "MSXML 3   " & s & vbCrLf
  182.     End If
  183.     sREG = "CLSID\{88D969C0-F192-11D4-A65F-0040963251E5}\InProcServer32"
  184.     objSWbemObject.GetStringValue &H80000000, sREG, "", s
  185.     If IsNull(s) Then
  186.         QueryXML = QueryXML & "MSXML 4   未安装  (已被 MSXML6 替代)" & vbCrLf
  187.     Else
  188.         QueryXML = QueryXML & "MSXML 4   " & s & vbCrLf
  189.     End If
  190.     sREG = "CLSID\{88D969E5-F192-11D4-A65F-0040963251E5}\InProcServer32"
  191.     objSWbemObject.GetStringValue &H80000000, sREG, "", s
  192.     If IsNull(s) Then
  193.         QueryXML = QueryXML & "MSXML 5   未安装  (office 软件专用 )" & vbCrLf
  194.     Else
  195.         QueryXML = QueryXML & "MSXML 5   " & s & vbCrLf
  196.     End If
  197.     sREG = "CLSID\{88d96a05-f192-11d4-a65f-0040963251e5}\InProcServer32"
  198.     objSWbemObject.GetStringValue &H80000000, sREG, "", s
  199.     If IsNull(s) Then
  200.         QueryXML = QueryXML & "MSXML 6   未安装" & vbCrLf
  201.     Else
  202.         QueryXML = QueryXML & "MSXML 6   " & s & vbCrLf
  203.     End If
  204.     If QueryXML = "" Then QueryXML = "未检测到 MSXML 安装信息" & vbCrLf
  205. End Function
  206. Function QueryNET()
  207.     'HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP
  208.     '读取注册表,判断 .NET Framework 的安装信息
  209.     'Const HKEY_LOCAL_MACHINE = &H80000002
  210.     Dim s, sREG, sVer, i, objReg
  211.     QueryNET = "已安装 .NET Framework :" & vbCrLf
  212.     Set objReg = GetObject("Winmgmts:\\.\Root\Default:StdRegProv")
  213.     sREG = "SOFTWARE\Microsoft\NET Framework Setup\NDP"
  214.     objReg.EnumKey &H80000002, sREG, s
  215.     If IsNull(s) Then
  216.         QueryNET = "未检测到 .NET Framework 安装信息" & vbCrLf
  217.         Exit Function
  218.     End If
  219.     For i = 0 To Ubound(s)
  220.         If Lcase(Left(s(i), 1)) <> "v" Then
  221.             '
  222.         ElseIf Lcase(s(i)) = "v4" Then
  223.             objReg.GetStringValue &H80000002, sREG & "\v4\Client", "Version", sVer
  224.             QueryNET = QueryNET & "v" & sVer & vbCrLf
  225.         Else
  226.             objReg.GetDWORDValue &H80000002, sREG & "\" & s(i), "SP", sVer
  227.             If IsNull(sVer) Then
  228.                 objReg.GetDWORDValue &H80000002, sREG & "\" & s(i) & "\Client", "SP", sVer
  229.                 If IsNull(sVer) Then
  230.                     QueryNET = QueryNET & s(i) & vbCrLf
  231.                 Else
  232.                     QueryNET = QueryNET & s(i) & " SP" & sVer & vbCrLf
  233.                 End If
  234.             Else
  235.                 QueryNET = QueryNET & s(i) & " SP" & sVer & vbCrLf
  236.             End If
  237.         End If
  238.     Next
  239.     QueryNET = QueryNET & vbCrLf
  240. End Function
  241. '参考文档:
  242. 'DirectX 简介和版本         http://zh.wikipedia.org/wiki/DirectX
  243. '用VBS判断x86或x64系统      http://demon.tw/programming/vbs-x86-x64.html
  244. 'win7系统Msgbox输出自动换行 http://blogs.msdn.com/b/oldnewthing/archive/2011/06/24/10178386.aspx
  245. 'WMI 操作注册表详解         http://hi.baidu.com/350078238/item/0f62f9104e107b6e71d5e88d
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2