タイトル : 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 が得られるまで、一定時間は検索を続けるなどの 対処が必要かと思います。 |