http://www24.cds.ne.jp/~neg/pro/piyo1/ap/close.html
をみたら
> !this->m_pPDFExeWnd->SendMessage(WM_CLOSE))
!this->m_pPDFExeWnd->PostMessage(WM_SYSCOMMAND, SC_CLOSE))
の方がよさそうです。
Blueさん、
ご返事ありがとう.
>>CreateProcess()とEnumWindows()で、
>>閉じることが出来ました。
>本当にそれでよかったんでしょうか?
なるほど、
そうですね、自分でそのフルパスを覚えて、他のマシンにインストールするときに、
確認が必要になります。よくないです。
でも、CreateProcess()の使い方がわかりました。場合によって、使い道があります。
確かに、CreateProcess()の柔軟性があります。
>ちなみに、ここには間違いがあります。
>ボタンでなくユーザが手動でAdobe Readerを閉じると、デバッグモードではASSERTしま
>す。
ボタン2(OnBnClickedOk())
if (!this->m_pPDFExeWnd)
this->m_pPDFExeWnd = this->FindWindow(_T(AdobeAcrobat), NULL);
if (this->m_pPDFExeWnd){
if (!this->m_pPDFExeWnd->SendMessage( WM_CLOSE))
this->m_pPDFExeWnd = NULL; // 閉じたので
}
で、書き直しました。
>!this->m_pPDFExeWnd->PostMessage(WM_SYSCOMMAND, SC_CLOSE))
>の方がよさそうです。
WM_SYSCOMMAND,を入れると、閉じることが出来なくなりました。
if (!this->m_pPDFExeWnd->SendMessage( WM_CLOSE))
this->m_pPDFExeWnd = NULL; // 閉じたので
正しいです。
いろいろ教えていただき、ありがとうございました。
> まぁ、CreateProcessでも出来なくはないですが、Adobe Readerのフルパスが必要にな
っ
> てしまうので、ShellExecuteEx関数で起動後、対象のウィンドウハンドルを探して、
> WM_CLOSEをSendMessageするようにしてはどうでしょうか?
開けるアプリケーションのパスが必要ないというのは大きな利点ですね。
私も勉強になりました。