VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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間との連携で教えてください」スレッドに
キーワードを列挙してます。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -