投稿日 | : 2002/10/08(Tue) 12:05 |
投稿者 | : Say |
Eメール | : |
URL | : |
タイトル | : Re: フォームを持たないアプリの終了。 |
以前書いたと思いますが、EnabledをFalseにした
ダミーフォームをくっつけてはどうでしょう。
そうすればAPIを使って、
強制終了させることなく終わらせることができます。
手順としては、クラス名またはウィンドウキャプション名をもとに
FindWindowまたはEnumWindowsでターゲットのウィンドウハンドルを取得し、
そのハンドルに対し、WM_CLOSEをSendMessageする、というものです。
終了確認は、FindWindowでターゲットウィンドウがなくなったのを確認した後
数百ミリ秒待ってみてもいいですが、
GetWindowThreadProcessIdでウィンドウハンドルからプロセスIDを取得し、
OpenProcessでプロセスIDからプロセスハンドルを取得して、
WaitForSingleObjectに渡してやったほうがいいでしょう。
もし、ダミーウィンドウを作らないのなら、
TerminateProcessで強制終了することになりますが、
メモリに残骸が残るとかの不具合が発生する可能性があります。
(それよりは、ターゲットアプリ側に
「プロセス間通信で何らかのデータをうけたらExitProcessする」
ように作っておいて、植わらせたいときは、そのデータを贈りつけるほうが安全です。)
参考までに、プロセス間通信に関しては
「他のEXE間との連携で教えてください」スレッドに
キーワードを列挙してます。