関数:Acrobat , Adobe Reader のインストールパスとバージョンを取得

TOP > サンプル/関数 > 関数:Acrobat,Adobe Reader のインストールパスとバージョンを取得      [...]


機能

Acrobat , Adobe Reader のインストールパスとバージョンを取得する。

  • Acrobat , Adobe Reader を指定可能
  • Windows へのインストールパスはレジストリから取得
  • インストールパスからアプリケーションのバージョン( '4'~'11' )を取得

 

形式

[boolean] = Get_Adobe_App_Info_nnn2(
    string strApp ,
    string strPath , 
    string strVersion ,  
    string strMsg )

 

引数

  1. 第1引数 ( string sstrApp ) : 
    'Acrobat'  Acrobatの処理
    'Reader' Adobe Readerの処理
  2. 第2引数 ( string strPath ) :
    Acrobat , Adobe Reader へのフルパス
  3. 第3引数 ( string strVersion ) : 
    アプリケーションのバージョン番号  '4'~'11'
  4. 第4引数 ( string strMsg ) : 
    エラー時のメッセージ 
    ””の場合はエラー無し

 

戻り値

  1. True : 正常な処理
  2. False : 実行エラー等

 

動作するバージョン

Microsoft
Excel
結果
備考
2000
NO
※OS : Windows 98SE
XP
-
※Office XP [=2002]
2003
OK
Windows XP Pro (SP3)
2007
OK
Windows 7 64bit Home (SP1)
2010
-
 
  • OK : 正常処理する。
  • NO : 正常に処理できない。 
  • - : 未確認。 

 





 


 

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_DYN_DATA = &H80000006
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)

'時間指定してCPUをシステムに戻す
Public Declare Sub Sleep Lib "kernel32.dll" _
    (ByVal dwMilliseconds As Long)

'********************************************************
' Windowsのレジストリから、アプリのインストールパスを取得
'********************************************************

Private Sub Get_Adobe_App_Info_nnn2_Test()

    Const CON_APP = "Acrobat"   'Acrobat
    'Const CON_APP = "Reader"   'Adobe Reader
    Dim strAcrobatPath  As String
    Dim strVersion      As String
    Dim strMsg          As String
    
    'Acrobat バージョンの取得
    Call Get_Adobe_App_Info_nnn2(CON_APP, _
        strAcrobatPath, strVersion, strMsg)
    
    Debug.Print "AcrobatPath    ='" & strAcrobatPath & "'" & vbCrLf & _
                "Acrobat Version='" & strVersion & "'" & vbCrLf & _
                "Message        ='" & strMsg & "'"
    
    
End Sub

'**************************************************
'
' Acrobat , Adobe Reader アプリのインストールパスと
' アプリケーションのバージョンを取得する
'
' Get the version and application path
' for acrobat and adobe reader.
'
' Create  : 2013/10/08
' Update  :
' Vertion : 1.0.0
'
' 引数1   : strApp As String (IN)
'           'Acrobat'  Acrobatの処理
'           'Reader'  Adobe Readerの処理
' 引数2   : strPath As String (OUT)
'           Adobe アプリケーションパス
' 引数3   : strVersion As String (OUT)
'           アプリケーションのバージョン番号 4~11
' 引数4   : strMsg As String (OUT)
'           エラーメッセージ
'           ""はエラー無し
'
' 戻り値  : True  正常処理
'           False 実行エラー等
'
' 備考    :
'      1. 以下のサイトの情報を元に作成しました
'    http://helpx.adobe.com/jp/acrobat/kb/511265.html
' URL     : http://pdf-file.nnn2.com/?p=767
' その他  : 著作権等は主張しません。
'           上記URLにコメントを頂けると嬉しいです。
'
'**************************************************

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
        'Acrobat Reg
        strSubKey = "SOFTWARE\Microsoft\Windows\" & _
            "CurrentVersion\App Paths\Acrobat.exe"
    Else
        'Adobe Reader Reg
        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) '長さ
    
    '"*.exe"エントリから既定のレジストリを得る
    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)

    '***************************************************
    '取得したパスの exeファイル情報を取得する
    '***************************************************

    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
    
    '確認
'    Debug.Print "strFileVersion   =" & strFileVersion
'    Debug.Print "strProductVersion=" & strProductVersion
    
    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

 

 

備考

  1. 以下のサイトの情報を元に作成しました
    http://helpx.adobe.com/jp/acrobat/kb/511265.html

 

動作確認環境

  • Windows 98SE (WindowsUpdate) + Excel 2000 (SP3)
  • Windows XP Pro (SP3 + WindowsUpdate) + Excel XP (SP3)
  • Windows XP Pro (SP3 + WindowsUpdate) + Excel 2003 (SP3)
  • Windows 7 64bit Home  (SP1 + MicrosoftUpdate) + Excel 2007 (SP3)

 

サンプル一覧

 


 

管理者だけのメモ

 

以下は見なくても結構です。

テスト結果のメモです。

 

テスト結果

動作確認環境: Windows XP 32bit + Office 2003 Excel

・Adobe Acrobat 5  (5.0.5) (32b XP)
strFileVersion   =5.0.5.452
strProductVersion=5.0.0.0
AcrobatPath    ='C:\Program Files\Adobe\Acrobat 5.0\Acrobat\Acrobat.exe'
Acrobat Version='5'
Message        ='ファイルバージョンと製品バージョンが異なる'

・Adobe Acrobat 6 Professional (6.0.6)
strFileVersion   =6.0.5.399
strProductVersion=6.0.5.399
AcrobatPath    ='C:\Program Files\Adobe\Acrobat 6.0\Acrobat\Acrobat.exe'
Acrobat Version='6'
Message        =''

・Adobe Acrobat 7 Professional (7.1.4)
strFileVersion   =7.0.8.218
strProductVersion=7.0.8.218
AcrobatPath    ='C:\Program Files\Adobe\Acrobat 7.0\Acrobat\Acrobat.exe'
Acrobat Version='7'
Message        =''

・Adobe Acrobat 8 Professional (8.3.1)
※OS: Windows 7 64bit + Office 2007 Excel
strFileVersion   =8.3.1.289
strProductVersion=8.3.1.289
AcrobatPath    ='C:\Program Files (x86)\Adobe\Acrobat 8.0\Acrobat\Acrobat.exe'
Acrobat Version='8'
Message        =''

・Adobe Acrobat 9 Pro Extended (9.5.2)
strFileVersion   =9.5.2.295
strProductVersion=9.5.2.295
AcrobatPath    ='C:\Program Files\Adobe\Acrobat 9.0\Acrobat\Acrobat.exe'
Acrobat Version='9'
Message        =''

・Adobe Acrobat X Pro (10.1.4)
strFileVersion   =10.1.4.38
strProductVersion=10.1.4.38
AcrobatPath    ='C:\Program Files\Adobe\Acrobat 10.0\Acrobat\Acrobat.exe'
Acrobat Version='10'
Message        =''

・Adobe Acrobat XI Pro (10.0.4)
strFileVersion   =11.0.4.63
strProductVersion=11.0.4.63
AcrobatPath    ='C:\Program Files\Adobe\Acrobat 11.0\Acrobat\Acrobat.exe'
Acrobat Version='11'
Message        =''

 

サンプル一覧

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


出来るだけ早く返答する様には心がけています。
が、遅くなる時もありますのでご了承ください。


SAMURAI Plugin