一度起動させたソフト(IE、Excel等)をクローズボタンを
押しても終了させないようにするには?どうしたらいいのでしょうか?
大きなお世話プログラムですね。
難しそうですね。
それよりも、クローズボタンなどのハンドルを取得して、
ボタンを非表示にして押させない、とするほうが簡単かも。
APIでシステム全体にフックするのはどうでしょうか。
確か、WM_CLOSEなどのメッセージ群を無視できた気がします。
http://madia.world.coocan.jp/delphi/Tokusen/hook.htm
http://wisdom.sakura.ne.jp/system/winapi/win32/win12.html
にCの解説ですが、、かなり近いものがありました!
これを参考にがんばってみます。
ありがとうございました!!
解決方法でなくて申し訳ないのですが、
http://madia.world.coocan.jp/delphi/Tokusen/hook.htm
このサンプルではWH_CALLWNDPROCというフック関数を使用しています。
このフック関数はメッセージの変更ができないようです。また、
http://wisdom.sakura.ne.jp/system/winapi/win32/win12.html
は、質問にある起動しているIEやExecl等の他のアプリに対するサンプルでは
ないようですね。
他のアプリが起動したら(フックして)常に監視するなどで可能かもしれませんが、
具体的な方法は思いつきません。
>それよりも、クローズボタンなどのハンドルを取得して、
>ボタンを非表示にして押させない、とするほうが簡単かも。
よく考えてみたら,×ボタンを無効にする方法が一番簡単そうですね.
フック(DLL)を作成する必要もないし.
質問された方はクローズボタン(おそらく×ボタンのこと?)なので非表示では
なく,無効ということで.
すみません、、それって具体的にどうやるんですか?
たとえば、Excelであれば、、
1)Excelのハンドルがあるか(起動したか)?じっと待つ
2)起動を感じたら、DeleteMenuとかで無効にする、、、?
こんな感じなんですか?
初心者にわかるようにお願いします!
>1)Excelのハンドルがあるか(起動したか)?じっと待つ
>2)起動を感じたら、DeleteMenuとかで無効にする、、、?
ですね。
(1)
現在起動中のアプリだけでいいなら
起動中の可視のウィンドウを調べる(列挙)。
(2)
起動を監視するなら、フック関数(何がいいかな?)でアプリの起動
を監視する。
参考までに、
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_HookCBTCreate.htm
の WH_CBTフックでHCBT_SYSCOMMANDを捕えて、wParam=SC_CLOSEの時に無効に
することが可能ですが、これはアプリによってはHCBT_SYCOMMANが無効、つまり
このフックを通過しないものがあります(特にマイクロソフトのアプリ)。
>このフックを通過しないものがあります(特にマイクロソフトのアプリ)。
Windows2k + Office2000では、エクセルは阻止できませんでした。
ワードは阻止可能でした。参考までに。
Delphiで作成した時アプリは阻止可能でした。もちろん×ボタンで終了の場合
です。
Mr.XRAYさん
ありがとうございます。
(いつもHP覗かせていただいています、、が初心者にはちょっと難しくて、、
でも、、楽しそうで、、
Delphiが再度盛り上がれたらいいのに、
といつも思っているかんべい!です^^
このままじゃ、、D5から次を買う気になれない、、。
って話があっちゃこっちゃですみません。)
>Delphiが再度盛り上がれたらいいのに、
>といつも思っているかんべい!です^^
>このままじゃ、、D5から次を買う気になれない、、。
グチをこぼしかったら、いつでも喫茶店の方へどうぞ。
独り言でもなんでも歓迎します。
運がよければ、誰かが相手をしてくださるかも(笑)。
ちょっと興味あるのでお聞きしたいのですが、
どの程度の終了拒否をしたいのでしょうか、
完全なプロセスの終了拒否となると相当難しいと思います。
たとえば、終了されたくないプロセスの一覧を保持して、終了を検知したら再起動をかけるようなものなら、結構簡単だと思いますがそれじゃだめですかね?
そんなアプリを二個起動してお互いを監視し合わせたりすると結構面白いかも。
ツイート | ![]() |