他のアプリの終了を知るには?


マリー  2005-12-02 13:21:04  No: 18989  IP: 192.*.*.*

タイトルどおり、他のアプリケーションが終了したことを
知る方法を教えてください。

ネットで見る限り、起動して、終了を待つ方法はわかるのですが、
既に起動しているアプリケーションが終了したことを知りたいのです。

タイマーを作動して、OpenProcess や EnumProcessModules を使って
調べるというのも試したのですが、
タイムラグにより、うまく動作しない場合があり、
リアルタイムに知りたいのです。
できますでしょうか?

編集 削除
Mr.XRAY  URL  2005-12-03 18:19:13  No: 18990  IP: 192.*.*.*

WH_CBTフックで,HCBT_DESTROYWNDメッセージを処理すれば可能です.
以下を参考にしてください.

http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_HookCBTActivate.htm

編集 削除
マリー  2005-12-08 12:18:04  No: 18991  IP: 192.*.*.*

Mr.XRAY さんありがとうございます。
参考にさせていただこうと思ったのですが、
よくわかりませんでした。

そっくりそのままでとりあえず
実行させるところまではできました。
次に終了時だけを処理するために
以下のように変更してみたのですが

DLL側の MyHookProc で
HCBT_DESTROYWND 以外をコメントにして
PostMessage を送るようにしたのですが、
クラス名が「・・」としか表示されません。



  case nCode of
{
  HCBT_ACTIVATE:
    begin
      PostMessage(pHookInfo(p)^.HostWinHandle,
                  pHookInfo(p)^.MsgID,wParam,lParam);
      :
    end;
}
  HCBT_DESTROYWND:
    begin
      PostMessage(pHookInfo(p)^.HostWinHandle,
      pHookInfo(p)^.MsgID,wParam,lParam);
    end;
{
  //メモ帳は移動リサイズさせない
  HCBT_MOVESIZE:
      :
  //メモ帳は最大化も最小化もさせない
  HCBT_MINMAX:
      :
}
  end;

編集 削除
Mr.XRAY  URL  2005-12-08 15:51:15  No: 18992  IP: 192.*.*.*

>クラス名が「・・」としか表示されません。

ハハハッと笑ってごまかす.
GetClassNameとGetWindowTextのコードの間違いですね.
ちゃんとPCharで取得するように修正しておきました.
Activeの方は偶然動作していたのですね.

# 誤字脱字と間違いの天才  Mr.XRAYでした.

編集 削除