AcroExch.App: Lock メソッド

TOP > AcroExch.App > Lock      [...]


説明

他のAcrobatアプリケーションを操作出来ない様に一時的にロックします。

サーバーでOLE(IAC)の同時実行する時に使用するのがベストでしょう。

基本的にクライアント・パソコンで使うメソッドではありません。

※補足と注意事項は必須です!

 

形式

VARIANT_BOOL Lock(BSTR szLockedBy);

 

引数

  • 第一引数(BSTR szLockedBy) : 排他制御するプログラム識別子(任意の文字列)
    注意:実際のテストでは意味を成さなかった。値は何でも構わない。空白でもOK。 

 

戻り値

  • -1 : True(真)で成功した。
    OLE(IAC)によってAcrobatアプリケーションは利用されていない。
  • 0 : False(偽)で失敗した。
    OLE(IAC)によってAcrobatアプリケーションは利用されている。

 

バージョン情報

当メソッドはテスト環境を作るのが非常に難しいので、ページ下部に動作環境だけでの検証とさせて頂きます。

 






サンプル:ExcelのVBA

説明:処理中は他のAcrobatアプリケーションの起動や、OLE(IAC)を操作出来ないようにする。

また、他でOLE(IAC)が使用中の時はループで処理が終わるまで待つ。

  • 参照設定を事前に行う。
  • 以下のサンプルはテスト用です。
    F8キーでステップ実行して動作確認します。

 

Public Declare Sub Sleep Lib "kernel32" _
    (ByVal dwMilliseconds As Long) 

Sub AcroExch_App_Lock()

    Dim objAcroApp As New Acrobat.AcroApp
    Dim objAcroPDDoc As New Acrobat.AcroPDDoc
    Dim lRet    As Long     '戻り値
    Dim l       As Long     'ループ用のカウント
    Const CON_LOOP = 20     'ループ回数のMAX

    l = 0
    'IACの排他制御をオンにする
    lRet = objAcroApp.Lock("syori01")
    Do While (lRet = 0)
        '他のプログラムで排他制御されている
        If l >= CON_LOOP Then
            'ループ限度を越えた
            'エラー処理・・
            GoTo AcroExch_App_Lock_Skip
        End If
        '0.5秒待つ
        Sleep 500
        l = l + 1
    Loop
    '他で排他制御が解除された
    
    'テスト確認用に画面表示する
    lRet = objAcroApp.Show
    lRet = objAcroPDDoc.Open("E:¥Test02.pdf")
    objAcroPDDoc.OpenAVDoc ("E:¥Test02.pdf")
    
    '・・・・・ココで一時停止して何か処理を行ってみる

    '以下のCloseは不要。実行すると次でエラーになる。
    'lRet = objAcroPDDoc.Close
    
    '全てのドキュメントを強制的に閉じる
    '※以下をしないとプロセスが残る。
    lRet = objAcroApp.CloseAllDocs 
     
    'アプリケーションの終了
    lRet = objAcroApp.Hide
    lRet = objAcroApp.Exit
    
AcroExch_App_Lock_Skip:
    '排他制御の開放
    lRet = objAcroApp.UnlockEx("syori01")
    
    'オブジェクトの強制開放
    Set objAcroPDDoc = Nothing
    Set objAcroApp = Nothing
    '※この後,Acrobatプロセスがメモリから消えるのに2~4秒掛かる
End Sub

 

補足

  • 上記サンプルのテストは Excel 2003 のVBAと Excel 2007 のVBAを同時に立ちあげて検証しました。
  • データベースで言う排他制御とは少し意味合いが異なります。
  • 第一引数の値で排他制御を行う訳では無いです、AcrobatアプリケーションがOLE(IAC)操作されているかどうか、又はAcrobatアプリケーションが起動されているかどうかを判断するだけです。つまり第一引数の値は無視されます
  • LockメソッドがTrue(-1)を返した後は、デスクトップからAcrobatアプリケーションは起動出来ません。起動しても以下のダイアログが表示され、何も操作は出来ません。 ※Acrobat 8.0 Pro の場合
    image
  • 本家Adobe社の英語解説と比べて、当サイトの解説内容がかなり異なります。御注意ください。
  • UnlockEx(又はUnlock)メソッドはAVDoc.OpenInWindowExメソッドと何らかの関係が有るみたいですが、当サイトでは解説していません。
  • UnlockEx(又はUnlock)メソッドはオブジェクト「Set objAcroAPP = Nothing」 の前ならどのタイミングで実行しても構わないです。
  • Lockメソッドの戻り値がFalseの時のループ回数Sleep時間は各自で調整して下さい。
  • 処理的にAcrobatを画面表示する必要が無ければ、Showメソッドを実行する必要はありません。CPUの無駄使いも防げます。
  • 同時実行のテストはOffice 2003 とOffice 2007 の Excel を使って行いました。一つのOfficeのVBA開発環境では2つの実行テストが出来ません。各バージョンの異なるExcelのVBA開発環境ならば2つ同時に立ち上げる事が可能です。 

 

注意事項:必読!

  • Lockメソッド実行の前にShowメソッドなど別の(AcroApp)オブジェクトのメソッドを使用しては駄目です。別のAcrobatインスタンスが立ち上がったと勘違い?をしてLockメソッドがFalse(0)を返します。つまり、Lockメソッドが失敗します。
  • Lockメソッドを使ったシステムを構築したときは、他のOLE(IAC)ロジックも必ずLockメソッドの結果を判断して処理の実行を制御(待ち状態に)して下さい。厳密にテスト検証は出来ていませんが、Lockメソッドを使ったロジックが実行中に他のOLE(IAC)ロジックを実行させると、予期しないエラーが出る事があります。
    以下はその時に表示されたVBAからのエラーメッセージの例です。
    実行エラー(1) 
    "0x030743d7" の命令が "0x00000008" のメモリを参照しました。メモリが "read" になることはできませんでした。
    プログラムを終了するには [OK] をクリックしてください
    プログラムをデバッグするには [キャンセル] をクリックしてください

    実行エラー(2)
    実行時エラー '-2147417851 (80010105)':
    'CloseAllDocs' メソッドは失敗しました: 'CAcroApp' オブジェクト
  • くどいようですが、Lockメソッドを使う時は他のOLE(IAC)プログラムでも全て Lockメソッドを使うようにして下さい。そうしないと予期しない不具合が発生し、プロセスがメモリに残ってしまいます。もちろん処理が終わったらUnLockEx(又はUnlock)メソッドを実行します。エラーが起きてもUnLockEx(又はUnlock)メソッドは実行して下さい。

 

動作確認環境

  • WindowsXP Pro( + SP2 + フルWindowsUpdate) +
    Acrobat 7.0.9 Pro + Office 2003
  • WindowsXP Pro( + SP3 + WindowsUpdate) +
    Acrobat 8.1.7 Pro + Office 2003(+ SP3) + Office 2007(+ SP2)

 

Adobe Web 解説 URL(英語) v9.1

http://livedocs.adobe.com/acrobat_sdk/9.1/Acrobat9_1_HTMLHelp/IAC_API_OLE_Objects.103.16.html

 

参考

http://www.adobe.com/jp/support/kb/ds/510/ds_510323_ja-jp.html

 

戻る


キーボード

ブラウザ画面の文字サイズを変更するショートカットキー

  1. [ CTRL ] + [ + ]  :  文字を大きく
  2. [ CTRL ] + [ - ]  :  文字を小さく

Shortcut Keys

  1. [ CTRL ] + [ + ]  :  Up the font size
  2. [ CTRL ] + [ - ]  :  Down the font size

コメントを残す

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

CAPTCHA


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


SAMURAI Plugin

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

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