|
楼主 |
发表于 2015-10-30 22:05
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
- Option Explicit
- 'Win32 API
- 'Public Const HKEY_CLASSES_ROOT = &H80000000
- 'Public Const HKEY_CURRENT_USER = &H80000001
- 'Public Const HKEY_CURRENT_CONFIG = &H80000005
- Public Const HKEY_LOCAL_MACHINE = &H80000002
- 'Public Const HKEY_LOCAL_MACHINE = &H80000002
- 'Public Const HKEY_USERS = &H80000003
- 'Public Const ERROR_SUCCESS = 0&
- Type VS_FIXEDFILEINFO
- dwSignature As Long
- dwStrucVersion As Long
- dwFileVersionMS As Long
- dwFileVersionLS As Long
- dwProductVersionMS As Long
- dwProductVersionLS As Long
- dwFileFlagsMask As Long
- dwFileFlags As Long
- dwFileOS As Long
- dwFileType As Long
- dwFileSubtype As Long
- dwFileDateMS As Long
- dwFileDateLS As Long
- End Type
- Public Declare Function RegCloseKey Lib "ADVAPI32" _
- (ByVal hKey&) As Long
- Public Declare Function RegOpenKeyEx Lib "ADVAPI32" _
- Alias "RegOpenKeyExA" (ByVal hKey&, ByVal lpSubKey$, _
- ByVal ulOptions&, ByVal samDesired&, phkResult&) As Long
- Public Declare Function RegQueryValueExstr Lib "ADVAPI32" _
- Alias "RegQueryValueExA" (ByVal hKey&, _
- ByVal lpValueName$, ByVal lpReserved&, ByVal lpType&, _
- ByVal lpdata$, lpcbData&) As Long
- Public Declare Function GetFileVersionInfoSize Lib _
- "Version.dll" Alias "GetFileVersionInfoSizeA" _
- (ByVal lptstrFilename As String, lpdwHandle As Long) _
- As Long
- Public Declare Function GetFileVersionInfo Lib "Version.dll" _
- Alias "GetFileVersionInfoA" _
- (ByVal lptstrFilename As String, ByVal dwHandle As Long, _
- ByVal dwLen As Long, lpdata As Any) As Long
-
- Public Declare Function VerQueryValue Lib "Version.dll" _
- Alias "VerQueryValueA" (pBlock As Any, _
- ByVal lpSubBlock As String, lplpBuffer As Any, _
- puLen As Long) As Long
-
- Public Declare Sub MoveMemory Lib "kernel32.dll" _
- Alias "RtlMoveMemory" (Destination As Any, _
- Source As Any, ByVal Length As Long)
- Public Declare Sub Sleep Lib "kernel32.dll" _
- (ByVal dwMilliseconds As Long)
- Private Sub 查看Acrobat安装路径和版本()
- Const CON_APP = "Acrobat"
- Dim strAcrobatPath As String
- Dim strVersion As String
- Dim strMsg As String
-
- Call Get_Adobe_App_Info_nnn2(CON_APP, _
- strAcrobatPath, strVersion, strMsg)
-
- Debug.Print "AcrobatPath ='" & strAcrobatPath & "'" & vbCrLf & _
- "Acrobat Version='" & strVersion & "'"
-
-
- End Sub
- Public Function Get_Adobe_App_Info_nnn2( _
- ByVal strApp As String, _
- ByRef strPath As String, _
- ByRef strVersion As String, _
- ByRef strMsg As String) As Boolean
-
- On Error GoTo Err_Get_Adobe_App_Info_nnn2:
-
- Dim strFileVersion As String
- Dim strProductVersion As String
- Dim strSubKey As String
- Dim strRootKey As String
- Dim InstallPathReg As Long
- Dim lLength As Long
- Dim lRet As Long
- Dim strName As String
-
- strMsg = ""
- strRootKey = HKEY_LOCAL_MACHINE
- If strApp = "Acrobat" Then
- strSubKey = "SOFTWARE\Microsoft\Windows" & _
- "CurrentVersion\App Paths\Acrobat.exe"
- Else
- strSubKey = "SOFTWARE\Microsoft\Windows" & _
- "CurrentVersion\App Paths\AcroRd32.exe"
- End If
-
- lRet = RegOpenKeyEx(strRootKey, strSubKey, 0, 1, _
- InstallPathReg)
-
- strPath = String(250, Chr(0))
- lLength = Len(strPath)
-
- strName = ""
- lRet = RegQueryValueExstr(InstallPathReg, strName, _
- 0, 0, strPath, lLength)
-
- strPath = Trim$(Replace(strPath, Chr(0), " "))
- If strPath = "" Then
- strMsg = "Not Found Adobe apllication"
- strVersion = vbNullString
- Exit Function
- End If
-
- strPath = Left$(strPath, InStr(strPath, ".exe") + 3)
-
- Call RegCloseKey(InstallPathReg)
- Dim lngSizeOfVersionInfo As Long
- Dim lngDummyHandle As Long
- Dim bytDummyVersionInfo() As Byte
- Dim lngPointerVersionInfo As Long
- Dim lnglLengthVersionInfo As Long
- Dim udtVSFixedFileInfo As VS_FIXEDFILEINFO
- lngSizeOfVersionInfo = GetFileVersionInfoSize(strPath, _
- lngDummyHandle)
-
- ReDim bytDummyVersionInfo(lngSizeOfVersionInfo - 1)
-
- lRet = GetFileVersionInfo(strPath, 0, _
- lngSizeOfVersionInfo, bytDummyVersionInfo(0))
-
- lRet = VerQueryValue(bytDummyVersionInfo(0), "", _
- lngPointerVersionInfo, lnglLengthVersionInfo)
-
- MoveMemory udtVSFixedFileInfo, _
- ByVal lngPointerVersionInfo, Len(udtVSFixedFileInfo)
-
- With udtVSFixedFileInfo
- strFileVersion = _
- CStr((.dwFileVersionMS \ 2 ^ 16) And &HFFFF&) & "." & _
- CStr(.dwFileVersionMS And &HFFFF&) & "." & _
- CStr((.dwFileVersionLS \ 2 ^ 16) And &HFFFF&) & "." & _
- CStr(.dwFileVersionLS And &HFFFF&)
-
- strProductVersion = _
- CStr((.dwProductVersionMS \ 2 ^ 16) And &HFFFF&) & "." & _
- CStr(.dwProductVersionMS And &HFFFF&) & "." & _
- CStr((.dwProductVersionLS \ 2 ^ 16) And &HFFFF&) & "." & _
- CStr(.dwProductVersionLS And &HFFFF&)
-
- strVersion = CStr((.dwProductVersionMS \ 2 ^ 16) And &HFFFF&)
-
- End With
-
- Get_Adobe_App_Info_nnn2 = True
- Exit Function
-
- Err_Get_Adobe_App_Info_nnn2:
- strMsg = "Run Time Error" & vbCrLf & Err.Number & _
- vbCrLf & Err.Description
- Get_Adobe_App_Info_nnn2 = False
- End Function
复制代码 |
|