ページ 11

MFC 関連付けされたファイルを起動中のアプリで開く方法

Posted: 2015年12月02日(水) 11:26
by hiro-ta
VisualStudio2010のMFCでアプリケーションを作成しているものです。アプリはMDIです。
ある拡張子(*.aaaとします)のファイルをこのアプリに関連付けして、このファイルがダブルクリックされたらこのアプリが起動してファイルを表示するようにしました。
これはアプリのCWinApp::InitInstance()で引数でわたってきたファイルパスを表示するようにしてやればOKでした。
しかしすでにこのアプリが起動した状態で、ファイルをダブルクリックするとうまくいきません。アプリが前面に表示されるだけでダブルクリックしたファイルは表示されないのです。
ブレークポイントをしかけて挙動を見てみようとしましたが、この場合、CWinApp::InitInstance()には入ってこないようです。
アプリが起動した状態で関連付けされたファイルがダブルクリックされたら、起動中のアプリで表示したいのですがどうやれば良いのでしょうか?

Re: MFC 関連付けされたファイルを起動中のアプリで開く方法

Posted: 2015年12月02日(水) 17:40
by hiro-ta
すみません、CWinApp::InitInstance()には入ってこないというのは私の勘違いでした。InitInstanceの中ですでに起動中のアプリを探して存在すればそのアプリに対してファイルパスを渡してやればOKでした。
ただ、渡してやる方法が良い方法が分からず、ファイルパスを適当なレジストリに保存して、起動中のアプリに対してアプリケーション定義のメッセージをSendMessageしてやるという方法をとりましたが、もっと良い方法があれば教えてください。

Re: MFC 関連付けされたファイルを起動中のアプリで開く方法

Posted: 2015年12月04日(金) 10:03
by can110
WM_COPYDATAメッセージを使うと、他プロセスのウインドウに任意のデータを送ることができます。

参考:他のウィンドウにデータを渡す
http://www.crimson-systems.com/tips/t018a.htm

Re: MFC 関連付けされたファイルを起動中のアプリで開く方法

Posted: 2015年12月04日(金) 14:42
by hiro-ta
WM_COPYDATAでうまくいきました。
良い方法を教えていただきありがとうございました。

Re: MFC 関連付けされたファイルを起動中のアプリで開く方法

Posted: 2015年12月05日(土) 00:33
by ISLe
DDEのopenコマンドを発行するように関連付けすれば
プログラムはそのままでご希望通りの動作をするようになるという話を見かけました。
本当かどうかは分かりませんが。