cocomoです。
早速質問ですがCreateProcessで実行されたプロセスを
TerminateProcessで終了している処理があります。
このとき、TerminateProcessで終了するプロセスで
終了処理をさせたいのです。
CreateProcessをするプロセス、CreateProcessされるプロセス
ともにでMFCのダイアログベースで作っています。
TerminateProcessを実行したとき
終了される側ではWM_DESTROYなどのメッセージは発行されないのですか?
TerminateProcessを実行する前に
PostMessageかなにかをする必要があるのですか?
どなたか宜しくお願いします。
開発環境は
Visual Studio .NET 2003
Windows2000
です。
MSDN で TerminateProcess の説明をちゃんと読むべき。
即座に外部から強制終了させるものであって終了処理はできない。
外部リソースのリークもありえる。通常使うべきたぐいの API ではない。
TerminateProcess など使わず単に PostMessage でメインウィンドウに
WM_CLOSE でも送れば十分なはず。設計を見直されたい。
undefined nameさんありがとうございます。
早速PostMessageを使ってみたのですがうまくいきません。
ダイアログのクロースイベントに処理が来ていません。
ダイアログのOnCloseのところに処理を記述しています。
ダイアログはCreateProcessで起動した
VC++.NET MFC ダイアログベースのEXEです。
FindWindowでハンドルを取得し
PostMessageを実行しています。
ソースは以下のとおりです。
HWND hWnd = FindWindow( "XXXDLG", NULL );
int rc = PostMessage(hWnd,WM_CLOSE,0,0);
rcの戻り値は1で成功しています。
WM_CLOSE はDlgProc には来ない?確認できなくて申し訳ないが、
別に WM_CLOSE でなくてもいいので、WM_APP+〜 あたり使うか、必要なら
RegisterWindowMessage でも使って独自のメッセージを投げておいて、
ダイアログ側でそのメッセージを受け取ったら終了処理をすればいいと思う。
もしくは、PreTranslateMessage で受信する方法もあるだろうし、
臨機応変に対応してみてください。
undefined nameさんありがとうございます。
おはずかしい話なんですが
EXEファイルを更新していませんでした。
WM_CLOSEで処理することが出来ました。
せっかくなのでRegisterWindowMessageなども
調べて見ることにします。
ツイート | ![]() |