|
■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
になるかもしれません。もっとも、それで解決するかは別問題なのですが。
|