web-dev-qa-db-ja.com

シャットダウン時にアプリケーションの自動終了を無効にする

一部のプログラムに保存されていないデータが含まれている場合にシャットダウンを続行するかキャンセルするかをユーザーに求めるWindowsVistaのシャットダウンプロセスに代わるWindows XP)はありますか?

8
Lawand

SystemEvents.SessionEnding イベントを渡すことで、いくつかのコードでこれを行うことができます。これにより、ログオフまたはシャットダウンを試みたときにダイアログボックスが表示され、ログオフまたはシャットダウンをキャンセルするかどうかを尋ねられます。

コードは、 Visual C#2008 Express Edition または windows SDK のいずれかを使用して無料でコンパイルできます。

SDKで、次のコマンドを使用します。

csc.exe   /out:StopShutdown.exe /target:winexe StopShutdown.cs 

コードは次のとおりです。

using System;
using System.Windows.Forms;
using Microsoft.Win32;

namespace StopShutdown
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
           string desktopRegKey = @"HKEY_CURRENT_USER\Control Panel\Desktop";
           Registry.SetValue(desktopRegKey, "AutoEndTasks", 0);
           Registry.SetValue(desktopRegKey, "WaitToKillAppTimeout", 20000);
           Registry.SetValue(desktopRegKey, "HungAppTimeout", 20000);

            Form AppForm = new Form()
                {
                    ClientSize = new System.Drawing.Size(0, 0),
                    ControlBox = false,
                    FormBorderStyle = FormBorderStyle.None,
                    Opacity = 0,
                    ShowIcon = false,
                    ShowInTaskbar = false,
                    SizeGripStyle = SizeGripStyle.Hide,
                };

            SystemEvents.SessionEnding += (_e, e) =>
            {
                DialogResult dr = MessageBox.Show(
                                    "Cancel shutdown?"
                                    , "Shutdown",
                                    MessageBoxButtons.YesNo,
                                    MessageBoxIcon.Question,
                                    MessageBoxDefaultButton.Button1);

                e.Cancel = (dr == DialogResult.Yes);
            };


            Application.Run(AppForm);
        }

    }
}

編集:

ダウンロード可能なソースとexe

10
Scott Weinstein

レジストリを少し編集したい場合は...スタート->実行-> regedit

HKEY_CURRENT_USER \コントロールパネル\デスクトップ

AutoEndTasksが0であることを確認し、WaitToKillAppTimeoutを20000(デフォルト値の2秒)に設定します。必要に応じて、値を高く設定できます。 HungAppTimeout(デフォルトは5000)もありますが、これは応答しないアプリケーションにさらに当てはまります。

2
Breakthrough

XPでシャットダウンを実行するたびに、プログラムがビジー状態の場合、プログレスバーと、[今すぐ終了]または[キャンセル]のオプションが表示されます。

[キャンセル]をクリックすると、シャットダウンプロセスが停止します。ただし、すでにシャットダウンしているものは何でも元に戻りません。

しかし、シャットダウンを再試行する前に、作業していたものを保存する時間があります。

0
warren