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

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


機能

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

  1. Acrobat , Adobe Reader を指定可能
  2. Windows へのインストールパスはレジストリから取得
  3. インストールパスからアプリケーションのバージョン番号( '4'~'11' , '15' , '17')を取得
    • '4':Acrobat 4
    • '5':Acrobat 5
    • '6':Acrobat 6
    • '7':Acrobat 7
    • '8':Acrobat 8
    • '9':Acrobat 9
    • '10':Acrobat X
    • '11':Acrobat XI
    • '15':Acrobat DC
    • '17':Acrobat 2017

 

形式

[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' , '15' , '17'
  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        =''

 

サンプル一覧

「関数:Acrobat , Adobe Reader のインストールパスとバージョンを取得」への2件のフィードバック

  1. 関数:PDFを特定のフォーマットに変換する
    をこちらの環境で試したところ、バージョンが17になっており、
    先に進めません。

    デバッグしているのですが、変換パラメータや出力時のデフォルト拡張子の記述部分はどこから持ってくるのか、ご教示いただけませんでしょうか。

    ちなみに、Acrobat 2017です。

  2. 須田 さん はじめまして。

    当ページは「関数:Acrobat , Adobe Reader のインストールパスとバージョンを取得」①に関する内容で、「関数:PDFを特定のフォーマットに変換する」②は別ページですから、質問はこのページ?
    いやいや、コッチ「関数:PDFを特定のフォーマットに変換する」のページですかね?

    >関数:PDFを特定のフォーマットに変換する

    まず、上記の関数はAcrobat XI (version 11)までを想定しています。

    >をこちらの環境で試したところ、バージョンが17になっており、
    >先に進めません。

    ②のページ上でのエラーなら
    If Not (CLng(strAcrobatVersion) >= 8 And CLng(strAcrobatVersion) <= 11)

    If Not (CLng(strAcrobatVersion) >= 8 And CLng(strAcrobatVersion) <= 17)
    にしたら動くかもしれませんが、・・。
    新バージョン Acrobat 2017 の登場はこの場で初めて知りました。
    よって動作確認環境も無いので結果は保証できません。

    >デバッグしているのですが、変換パラメータや出力時のデフォルト
    >拡張子の記述部分はどこから持ってくるのか、・・

    この質問は②の方ですね。
    これは 「関数:PDFを特定のフォーマットに変換する」 の引数に書いてあります。
    それだけでは分かりにくいので「Sub Convert_PDF_Format_Main_TEST()」にも引数のサンプルを書いてあります。それを参考にして下さい。

    *第2引数 ( string strOutputFolder ) : (IN)
    *変換先のフォルダ名
    *既に存在する必要が有る。無いとエラーになる。
    strOutputFolder = "I:¥Adobe PDF¥Output"

    *変換元のPDFのフルパス (IN/必須)
    strConvPDFfile(0, 0) = "I:¥Adobe PDF¥TEST-NO-Sec.pdf"
    *変換タイプ (IN/必須)
    strConvPDFfile(0, 1) = "accesstext" '変換タイプ
    * 変換先ファイル名 (IN/任意)
    strConvPDFfile(0, 2) = "TEST-NO-Sec.txt" '出力ファイル名
    *処理結果 エラーメッセージをセット(OUT)
    strConvPDFfile(0, 3) = "" '処理結果
    strConvPDFfile(1, 0) = "I:¥Adobe PDF¥TEST-NO-Sec.pdf"
    strConvPDFfile(1, 1) = "doc" '変換タイプ
    strConvPDFfile(1, 2) = "TEST-NO-Sec.doc" '出力ファイル名
    strConvPDFfile(1, 3) = "" '処理結果
    strConvPDFfile(2, 0) = "I:¥Adobe PDF¥VBJavaScript.pdf"
    strConvPDFfile(2, 1) = "eps" '変換タイプ
    strConvPDFfile(2, 2) = "" '未指定はVBJavaScript.epsになる
    strConvPDFfile(2, 3) = "" '処理結果

    accesstext、doc、epsの拡張子は②の概要に書いて有ります。(分かりにくかったですかね、汗。)
    拡張子は ExportTask.xml から持ってきています。
    但し、ExportTask.xmlに関してはAdobe社からの一般公開情報には明記が見当たりません。海外のサイトを調べても全く有りません。これは当サイトが独自に調査してテストから出した結果です。

    なお、ファイル変換を行うのでしたら、他にも「サンプル/関数 一覧」にサンプルが有ります。

    それと途中でも書きましたが、Acrobat 2017 は初めて知りました。どのような動作をするのか、全く予想が出来ません。

    以上、返答させて頂きます。
    ※スイマセン。急いで返答したので乱文です。(疲

    ▼追加 2017/7/6 8:42
    4年も前の事なので記憶が薄れていますが。拡張子に関する情報は一般公開されていませんでした。偶然 Acrobat JavaScript で同様なフォーマット変換時に変換ID(例:com.adobe.acrobat.xml-1-00)を使っている事を知りました。これをレジストリを含めWindowsシステム全体で検索したところ、ExportTask.xmlに行き着きました。そこから一致する変換時の拡張子を取り出しました。それが「関数:PDFを特定のフォーマットに変換する」の概要の最初の部分に書いてある拡張子です。くどいようですが、この情報に関しては他のネット上に存在しません。

    ▼追加 2017/7/6 9:17
    かなり思い出して来ました。Acrobat OLEでも拡張子の指定は出来なく、変換IDを使う必要があります。そこでExportTask.xmlの内容から拡張子に該当すると思われる変換IDを決定しています。
    よって修正する箇所は「関数:PDFを特定のフォーマットに変換する」サンプルのConvert_PDF_Format_ET_nnn2 関数内の
    If Not (CLng(strAcrobatVersion) >= 8 And CLng(strAcrobatVersion) <= 11)

    If Not (CLng(strAcrobatVersion) >= 8 And CLng(strAcrobatVersion) <= 17)
    に、更に
    Case "11"

    Case "11","17"
    で動くかもしれないです。
    Acrobat 2017環境が無いので動作未確認です。

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

コメントをする時は最低でも以下をお願いします。

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン