none
Windows Vistaの「ログオフしています」の表示時間を長くする方法 RRS feed

  • 質問

  • お世話になります。

    Vistaでログオフしたときに、「ログオフしています」の画面が表示されますが、
    この「ログオフしています」画面が表示している間に、サービスで行ってる処理を終了させたいと思っています。
    現状は、WTS_SESSION_LOGOFFのイベントを取得し、ログオフの処理を行っていますが、
    ログオフの処理完了前にCTRL-ALT-DEL画面が表示されてしまいます。
    「ログオフしています」画面の表時間を長くする方法または、CTRL-ALT-DEL表示するまでの時間を遅くする方法はありませんでしょうか?

    以上、よろしくお願いします。

     

    2009年1月30日 15:27

回答

  • 実際の動作からもドキュメントからも、WTS_ 系のイベントは単なる通知なだけで、ユーザ切り替えの処理は通知を受け取った側が何をしていても関係なく進んでいくように見えます。
    一部のアプリケーションやサービスが、ユーザの高速な切り替えを妨げてしまうことを防ぐ意味からも、この挙動は自然な感じを受けます。

    幸い、今回はログオフがメインということなので、それならば実際にログオフをするタイミングで何かできそうな気がしています。
    くどいようですが、WM_QUERYENDSESSION が駄目なら、その後に続く WM_ENDSESSION でなら何とかならないでしょうか。これがログオフを示していれば事実上ログオフと見なしても良さそうな気がします。
    こちらは時間に関する記述がないので何ともいえないのですが、アプリケーションがダイイングメッセージを残せる程度には猶予が与えられているはずです。

    • 回答としてマーク 桜ソフト 2009年2月5日 13:58
    2009年2月3日 2:05
  • 桜ソフト の発言:

    私がサービスで行ってる処理は、
    ユーザが完全にログオフした状態でないと、処理に失敗します。
    WM_ENDSESSIONは、ユーザが完全にログオフする前に、
    発生するイベントなので、今行ってる処理を行うのは無理そうです。

    なるほど、そうでしたか。

    ところで、CTRL-ALT-DEL の画面が表示されると困るのは何故なのでしょうか?
    もし、処理が終了しないうちにログオンされると困るといったような理由なら、ログオン時の処理で逃げるという手も候補に挙がってくると思います。

    • 回答としてマーク 桜ソフト 2009年2月5日 15:15
    2009年2月5日 14:15

すべての返信

  • WM_QUERYENDSESSION なら、5秒間の猶予があるそうです。
    MSDN には「それでも間に合わない場合は ShutdownBlockReasonCreate(Vista以降)を送ってね」とあります。

    WM_QUERYENDSESSION が来るのはログオフ前なのですが、終了のタイミングがシビアなのであればこちらを使うという手も考えられます。
    2009年2月2日 1:55
  • zakioさん
    返信ありがとうございます。

    質問の書き方が問題でした。
    ユーザのログオフ完了後に、サービス上で処理を行っています。
    ログオフ完了のタイミングで、処理完了後にCTRL-ALT-DEL画面の表示を行おうとしています。
    WM_QUERYSESSIONだと、zakioさんが書いていらっしゃる通り、ログオフ完了前なので、
    今回の処理では、使うことができません。

    2009年2月2日 15:34
  • 実際の動作からもドキュメントからも、WTS_ 系のイベントは単なる通知なだけで、ユーザ切り替えの処理は通知を受け取った側が何をしていても関係なく進んでいくように見えます。
    一部のアプリケーションやサービスが、ユーザの高速な切り替えを妨げてしまうことを防ぐ意味からも、この挙動は自然な感じを受けます。

    幸い、今回はログオフがメインということなので、それならば実際にログオフをするタイミングで何かできそうな気がしています。
    くどいようですが、WM_QUERYENDSESSION が駄目なら、その後に続く WM_ENDSESSION でなら何とかならないでしょうか。これがログオフを示していれば事実上ログオフと見なしても良さそうな気がします。
    こちらは時間に関する記述がないので何ともいえないのですが、アプリケーションがダイイングメッセージを残せる程度には猶予が与えられているはずです。

    • 回答としてマーク 桜ソフト 2009年2月5日 13:58
    2009年2月3日 2:05
  • zakioさん

    返信が遅くなりました。

    情報不足でした。。。。たびたびで申し訳ありません。。。
    私がサービスで行ってる処理は、
    ユーザが完全にログオフした状態でないと、処理に失敗します。
    WM_ENDSESSIONは、ユーザが完全にログオフする前に、
    発生するイベントなので、今行ってる処理を行うのは無理そうです。

    zakio の発言:

    実際の動作からもドキュメントからも、WTS_ 系のイベントは単なる通知なだけで、ユーザ切り替えの処理は通知を受け取った側が何をしていても関係なく進んでいくように見えます。
    一部のアプリケーションやサービスが、ユーザの高速な切り替えを妨げてしまうことを防ぐ意味からも、この挙動は自然な感じを受けます。


    なるほど。。そういうことですか。。
    CTRL-ALT-DELの画面表示を遅くする処理とかは厳しそうですね。。
    別な方法を考えてみます。
    ありがとうございました。



    2009年2月5日 13:58
  • 桜ソフト の発言:

    私がサービスで行ってる処理は、
    ユーザが完全にログオフした状態でないと、処理に失敗します。
    WM_ENDSESSIONは、ユーザが完全にログオフする前に、
    発生するイベントなので、今行ってる処理を行うのは無理そうです。

    なるほど、そうでしたか。

    ところで、CTRL-ALT-DEL の画面が表示されると困るのは何故なのでしょうか?
    もし、処理が終了しないうちにログオンされると困るといったような理由なら、ログオン時の処理で逃げるという手も候補に挙がってくると思います。

    • 回答としてマーク 桜ソフト 2009年2月5日 15:15
    2009年2月5日 14:15
  •  
    zakio の発言:

    ところで、CTRL-ALT-DEL の画面が表示されると困るのは何故なのでしょうか?
    もし、処理が終了しないうちにログオンされると困るといったような理由なら、ログオン時の処理で逃げるという手も候補に挙がってくると思います。



    そういう手段がありましたね。。
    検討してみます。

    ありがとうございました。

    2009年2月5日 15:15