重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

VC++2008にてプログラムを作成しています。

自作プログラム(疑似エクスプローラ)にて、
ShellExecute関数でファイルをオープンさせた際に、
開かれたファイルウィンドウのHWNDまたはCWndを
取得したいのですが、実現方法が分かりません。

・やりたい事
 複数ファイルをオープンさせて、各ファイルが閉じられた時に、
 ファイル毎に任意の処理を行いたい。

マルチスレッドにて、CreateProcess→ファイルオープンを行い、
WaitForSingleObjectで、ファイルが閉じられるまで待機し、
コントロールが戻ってきたら、任意処理をするようにしていたのですが、
PowerPointファイルは複数ファイルを立ち上げても、
1プロセスにしかならないため、実装の変更を余儀なくされました。

CWnd->m_hWndで、各ファイルの区別が付けられるのではないかと
考え、現在、テスト用処理を組んでいるところです。
ファイルが閉じられたかどうかは、APIフックを用い、
DestroyWindowが呼ばれた際のHWNDを、自作プログラム側に送り、
ShellExecute時に取得しておいたHWND(またはCWnd)であれば、
任意処理へ移行。といった流れを考えています。


ShellExecute時に立ち上がったファイルのハンドルの
取得方法、または、全く別に、上記の目的を満たす
処理方法がありましたら、アドバイスお願いします。

A 回答 (1件)

ShellExecuteは指定プロセスの初期化が成功すると、制御が戻ります。


この時(制御が戻った時)、ウィンドウが開かれているかどうかは
不定です。(ウィンドウの無いアプリケーションだってある)
なので、根本的な考え方を改める必要がありそうです。
FindWindow、EnumChildWindowsあたりで該当ウィンドウを得ることが
できるとは思います。ただ、見つけるまでが面倒です。
    • good
    • 0
この回答へのお礼

返答がかなり遅れてしまい、申し訳ありませんでした。

FindWindowで取得するにも、同名ファイルが複数開かれていた場合
目的のファイルを取得できるとは限らないため、
Add-inを作成して、データの受け渡しができるよう考えてみます

お礼日時:2009/11/11 13:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!