くわぽん氏がよさげなツール2種類を開発中です。素晴らしい!見習え!>SHARP(笑)
http://kuwapon.blog.so-net.ne.jp/2008-10-27-1
常駐タイプ。スリープ or 休止への移行を検知してダイアルアップを切断してくれます。残念ながら俺の環境では休止状態になる場合にうまく動かなかった。
http://kuwapon.blog.so-net.ne.jp/2008-10-24-3
手動タイプ。起動するとダイアルアップを切断後にスリープ or 休止に移行してくれます。タイムアウトではなく、必ず手動でスリープ or 休止させてる人は現状ではこちらのほうが確実かな。
以下技術的な話。
前者はWM_POWERBROADCAST(.NETでは別名で定義されてる模様)を検知して動くものだと思うけど、試したところスリープへの移行の場合はうまく動作するものの、休止状態の場合には「復帰した直後に」ダイアルアップを切断しようとしてしまう。切断処理が行われる前に休止状態に移行しちゃってる感じ。
Vistaの場合にも有効なのかちょっと不安ながら、WM_POWERBROADCAST/PBT_APMQUERYSUSPENDに対してBROADCAST_QUERY_DENYを返せば休止やスリープへの移行を拒否できたと思う。一旦拒否した後にダイアルアップ切断処理を行い、完了したら改めて自から休止やスリープを行うならうまくいきそうな気がするけど、どうでしょう?(自分で試せとか思うけどメンドイ俺(ぉ
...と思いつつやっぱり気になるので調べたところ、Vistaでは上記の手段は使えないそうです。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2275165&SiteID=7
Vistaではログアウト時のアプリ終了要求の拒否もできなくなっているので、もしかしてこちらもダメかもと思ったらやっぱり、という感じですな。う〜む、アプリ起因のログアウトできない問題などを回避したいのだろうけど、いくらなんでもこれはOSの役割を考えたら改悪だよなぁ(苦笑)