タイトルどおり、他のアプリケーションが終了したことを
知る方法を教えてください。
ネットで見る限り、起動して、終了を待つ方法はわかるのですが、
既に起動しているアプリケーションが終了したことを知りたいのです。
タイマーを作動して、OpenProcess や EnumProcessModules を使って
調べるというのも試したのですが、
タイムラグにより、うまく動作しない場合があり、
リアルタイムに知りたいのです。
できますでしょうか?
WH_CBTフックで,HCBT_DESTROYWNDメッセージを処理すれば可能です.
以下を参考にしてください.
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_HookCBTActivate.htm
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;
>クラス名が「・・」としか表示されません。
ハハハッと笑ってごまかす.
GetClassNameとGetWindowTextのコードの間違いですね.
ちゃんとPCharで取得するように修正しておきました.
Activeの方は偶然動作していたのですね.
# 誤字脱字と間違いの天才 Mr.XRAYでした.
ツイート | ![]() |