プロセスの終了処理をするには

解決


cocomo  2004-12-24 03:13:41  No: 55787

cocomoです。

早速質問ですがCreateProcessで実行されたプロセスを
TerminateProcessで終了している処理があります。
このとき、TerminateProcessで終了するプロセスで
終了処理をさせたいのです。
CreateProcessをするプロセス、CreateProcessされるプロセス
ともにでMFCのダイアログベースで作っています。
TerminateProcessを実行したとき
終了される側ではWM_DESTROYなどのメッセージは発行されないのですか?
TerminateProcessを実行する前に
PostMessageかなにかをする必要があるのですか?
どなたか宜しくお願いします。

開発環境は
Visual Studio .NET 2003
Windows2000
です。


undefined name  2004-12-24 04:38:20  No: 55788

MSDN で TerminateProcess の説明をちゃんと読むべき。
即座に外部から強制終了させるものであって終了処理はできない。
外部リソースのリークもありえる。通常使うべきたぐいの API ではない。

TerminateProcess など使わず単に PostMessage でメインウィンドウに
WM_CLOSE でも送れば十分なはず。設計を見直されたい。


cocomo  2004-12-24 20:35:00  No: 55789

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で成功しています。


undefined name  2004-12-24 21:47:57  No: 55790

WM_CLOSE はDlgProc には来ない?確認できなくて申し訳ないが、
別に WM_CLOSE でなくてもいいので、WM_APP+〜 あたり使うか、必要なら
RegisterWindowMessage でも使って独自のメッセージを投げておいて、
ダイアログ側でそのメッセージを受け取ったら終了処理をすればいいと思う。
もしくは、PreTranslateMessage で受信する方法もあるだろうし、
臨機応変に対応してみてください。


cocomo  2004-12-24 22:47:26  No: 55791

undefined nameさんありがとうございます。

おはずかしい話なんですが
EXEファイルを更新していませんでした。
WM_CLOSEで処理することが出来ました。
せっかくなのでRegisterWindowMessageなども
調べて見ることにします。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加