tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: Processによるアプリの起動について
投稿日: 2014/01/27(Mon) 14:28
投稿者魔界の仮面弁士
> AcrobatReader を Process で起動した場合、ウィンドウの最前面に固定する方法は
AcrobatReader ではなく、
Adobe Reader ですよね。

Adobe Acrobat Reader はバージョン 5.x が最後のバージョンであり、
6 以降では Adobe Reader という製品名に改名されています。

で、これもまた、バージョンによって微妙に動作が異なりますし、
シェルの設定(PDF ハンドラー)によっても変わってきます。


とりあえず、現行バージョン(Adobe Reader XI)の動きをみたところ、

(1)最初に開かれたドキュメントであれば、Process.Start の戻り値で
 そのまま管理できる。MainWindowHandle プロパティからは HWND が返され、
 Id プロパティからは PID が返されるし、WaitForExit メソッドを呼べば
 リーダーが閉じられるまで待機される。

(2)二番目以降に開かれたドキュメントの場合、AcroRd32.exe は起動された途端に
 終了するとともに、別プロセスで AcroRd32.exe が再起動されて開かれる。
 最初の Process は、HasExited プロパティが True を返すことになるし、
 WaitForExit メソッドを呼び出しても、既に終了済みのため待機しない。
 なお、Process クラスの Id プロパティは、起動したときの PID を返す。

という動作となっているようです。


厄介なのは後者です。起動したプロセスを追うことができないのであれば、
現在起動している Reader を列挙するために
 Process.GetProcessesByName("AcroRd32")
を使うという手もありますが、exe が再起動するまでのタイムラグがあるので
有効な MainWindowTitle が得られるまで、一定時間は検索を続けるなどの
対処が必要かと思います。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。