C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Acrobat Readerを自動的に閉じる方法

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■91626 / inTopicNo.1)  Acrobat Readerを自動的に閉じる方法
  
□投稿者/ ペコ犬 (13回)-(2019/07/16(Tue) 12:34:15)

分類:[VB.NET/VB2005 以降] 

VB.NetよりPDFを印刷するプログラムを作成しています。
PDFはプリンタに印刷されるのですが、
Acrobat Readerが最小化されてタスクに表示されてしまいます。
自動的にAcrobatを閉じたいのですが、何か良い方法はありますか?
以下、ソースです。


-----------------------------------------------------------------
Private Sub Test()
Dim p As New System.Diagnostics.Process()
Dim fileNm As String = String.Empty

'PDFファイルのパスを設定
fileNm = "C:\Test\test1.pdf"
p.StartInfo.FileName = fileNm
p.StartInfo.Verb = "print"

'Acrobatのコマンドライン引数設定
p.StartInfo.Arguments = "/s /l /p /h"
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
'プロセスを新しいWindowで起動
p.StartInfo.CreateNoWindow = True

'プロセス起動
p.Start()
p.WaitForExit()
End Sub
-----------------------------------------------------------------


※Argumentsに問題があるのでは?と思い、参考になりそうなURLも見つけましたが、
 上手くいきませんでした。
 
 http://scripting.cocolog-nifty.com/blog/2007/07/adobe_reader_81_e41e.html

引用返信 編集キー/
■91639 / inTopicNo.2)  Re[1]: Acrobat Readerを自動的に閉じる方法
□投稿者/ shu (1187回)-(2019/07/16(Tue) 17:52:16)
No91626 (ペコ犬 さん) に返信
>
> p.WaitForExit()
この後に
p.CloseMainWindow()

p.Kill()
を実行(CloseMainWindowで終了するならそちらの方がよい)


引用返信 編集キー/
■91640 / inTopicNo.3)  Re[2]: Acrobat Readerを自動的に閉じる方法
□投稿者/ ペコ犬 (14回)-(2019/07/16(Tue) 18:43:02)
No91639 (shu さん) に返信

ご回答ありがとうございます。

p.CloseMainWindow()を実行したところ、
Acrobatが残ってしまいました。

p.Kill()を実行したところ、
Acrobatは残らなかったのですが、
印刷処理は実施されませんでした。

印刷ジョブが実行されたタイミングで
kill出来ないか調査したいと思います。

引用返信 編集キー/
■91641 / inTopicNo.4)  Re[1]: Acrobat Readerを自動的に閉じる方法
□投稿者/ 魔界の仮面弁士 (2243回)-(2019/07/16(Tue) 20:54:37)
No91626 (ペコ犬 さん) に返信
> Acrobat Readerが最小化されてタスクに表示されてしまいます。

pdf の関連付けが Acrobat Reader DC とは限らないのでは?
たとえば Edge かも知れないし、Foxit かもしれない…。


パラメータを明示して、Acrobat Reader DC 前提とするのであれば、関連付けに依存させず、
.FileName は "AcroRd32.exe" へのフルパスにしてしまい、
.Arguments に、ファイル名を指定した方が良いのではないでしょうか?


ちなみに、拡張子に関連付けられた実行ファイルのパスを取得する方法は、
Acrobat DC SDK に含まれている
\InterAppCommunicationSupport\VBSamples\AdobePDFSilentVB\AdobePDFSilent\VB\AdobePDFSilent\AdobePDFSilent.vb
の GetProgramPath(".pdf") 関数などを利用できます。


同ファイルには、下記のコードも記されていたので、
方針的には間違っていなさそうですが、それでも表示されてしまうということは、
Acrobat Reader DC 側の機能制限なのかもしれません。
(あるいは、Acrobat Reader DC 側の環境設定に何か設定項目があるのか…)


Private Sub PrintToAdobePDF(ByVal InputfilePath As String)

  'Prints InputFilePath to the AdobePDF printer.
  'Since we just gathered all this info programmatically,
  'this function assumes the file is present, that it has an
  'associated application and that the current user has print privileges.

  'Define properties for the print process
  Dim pProcInfo As New ProcessStartInfo

  pProcInfo.FileName = InputfilePath
  pProcInfo.Verb = "Print"

  'Make process invisible
  pProcInfo.CreateNoWindow = True
  pProcInfo.WindowStyle = ProcessWindowStyle.Hidden

  'start print process
  Dim pMyProc As Process = Process.Start(pProcInfo)
  pMyProc.WaitForExit()
End Sub

※「Using pMyProc As Process = Process.Start(pProcInfo)」にしなくて良いのかな?



> p.StartInfo.Arguments = "/s /l /p /h"

手元の環境で、提示頂いたコードを試してみたところ、
Process クラスの Id プロパティから返される値(p.Id) と、
最小化されてタスクバーに表示されているもののプロセスId は別物でした。

p.Start() した時点で "AcroRd32.exe" が 2 つ起動されておりますが、
p.Id が指し示しているのは、非表示な方のプロセスです。


まず、p.Start() によって
"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /p /h "X:\Example.pdf"
が非表示で起動され、さらにそのプロセスが
"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" --type=renderer /prefetch:1 /p /h "X:\Example.pdf"
を呼び出しており、こちらが最小化されている状態です。

これはなぜかといえば、レジストリの関連付け設定で \shell\Print\command が
「"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /p /h "%1"」
として設定されているためででしょう。


現在も /s や /l が有効なオプションであるかは知らないのですが、
もしもそれらを使おうとしたら、

With p.StartInfo
 .FileName = pdfFile
 .Verb = "print"
 .Arguments = "/s /l /p /h"
End With

ではなく、

With p.StartInfo
 .FileName = AcroRd32のフルパス
 .Verb = "open"
 .Arguments = "/s /l /p /h """ & pdfFile & """"
End With

になるかもしれません。もっとも、それで解決するかは別問題なのですが。
引用返信 編集キー/
■91646 / inTopicNo.5)  Re[2]: Acrobat Readerを自動的に閉じる方法
□投稿者/ ペコ犬 (16回)-(2019/07/17(Wed) 13:15:53)
No91641 (魔界の仮面弁士 さん) に返信

> With p.StartInfo
>  .FileName = AcroRd32のフルパス
>  .Verb = "open"
>  .Arguments = "/s /l /p /h """ & pdfFile & """"
> End With
>
> になるかもしれません。もっとも、それで解決するかは別問題なのですが。


ご回答ありがとうございます!
.FileNameと.Argumentsの指定で悩んでいたのですが、
Acrobatを表示させずに正しく印刷できました。



解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ