• 締切済み

エクスプローラから開かれるWordを別プロセスにするには

VC++2008にてプログラムを作成しています。 自作プログラム(疑似エクスプローラ)にて、 WordやExcelファイルをCreateProcessにて オープンし、WaitForSingleObjectにて ファイルが閉じられるまで待機。 ファイルが閉じられたら、終了処理という流れのシステムを 作成しています。 自作プログラムからオープンする際は、 Officeのコマンドラインオプションを用いて 別プロセスで起動するようにしていますので、 自作プログラムからWord(またはExcel)ファイルを 複数開いても、個別プロセスになるので、 各ファイルが個別に終了処理を行えるようになっています。 (なっていると思っていた) 問題は、自作プログラムからWord(a.doc)を開き、 エクスプローラから別ファイルのWord(b.doc)を開いた際、 b.docは個別にプロセスが作成されず、 a.docで作成した1プロセスにまとめられてしまうことです。 そのため、a.docを閉じても、b.docが開いている限り、 終了処理に移行しません。 APIフックにて、CreateProcessを引っ掛けてみたのですが、 エクスプローラからのファイルオープン時には 呼ばれていないようで、自作プログラム外で ファイルオープンをした際に、強制的に独自プロセスで 起動する方法が分りません。 自作プログラム起動時に限り、Word,Excelのファイルを 独自プロセスで開かせたいのですが、 解決方法はありますでしょうか? よろしくお願いします。

みんなの回答

回答No.1

おそらく、自作プログラムでWORDを起動するのではなく、別の方法でDOCファイルの編集を行うようにしなければならないのではないでしょうか。 試してはいませんが、OLEコンテナを使用する(例えばEXCELのワークシートにDOCファイルを貼り付けてEXCELの中で編集するとか自作プログラムにOLEコンテナ機能を実装する)となんとかならないかなー、と思います。 それか、エクスプローラなどからDOCファイルを開く時に自作プログラムが起動したプロセスが使用されることは許しておいて、自作プログラムがWORDを起動する時に、マクロも同時に読み込ませるようにして、対象のファイルを閉じる時に自作プログラムにメッセージを送らせる、とかでしょうか。

lhouse
質問者

補足

回答ありがとうございます。 質問の時に省いてしまいましたが、 終了処理とは別に、APIフックで、 個々のファイルを区別した上での処理を 行っているため、単に終了処理に移行すれば良いだけでなく 明確に1ファイル毎に区別出来なければ駄目なのです。