Desativar encerramento automático de aplicativos no desligamento


8

Existe alguma alternativa do Windows XP ao processo de desligamento do Windows Vista que solicite ao usuário que continue ou cancele o desligamento no caso de alguns programas conterem dados não salvos?

Respostas:


10

Você pode fazer isso com algum código entregando o evento SystemEvents.SessionEnding . Isso exibirá uma caixa de diálogo quando você tentar fazer logoff ou desligamento e perguntar se deseja cancelar o logoff ou desligamento.

O código pode ser compilado gratuitamente com o Visual C # 2008 Express Edition ou com o Windows SDK .

Com o sdk, use o seguinte comando:

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

Aqui está o código:

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);
        }

    }
}

Editar:

Fonte e exe para download .


você seria uma pessoa legal e faria o upload do "StopShutdown.exe" em algum lugar ou o enviaria por e-mail para mim? (Eu entendo se você não disse)
— Lawand


Bom trabalho, você chegou muito perto: deixei um arquivo não salvo aberto e invoquei o desligamento no menu Iniciar. Em seguida, um prompt me perguntava se eu queria cancelar o desligamento, mas quando esperei alguns segundos, o Windows encerrou o programa e executou. o processo de desligamento ...
— Lawand 23/08/09

Sim, se você quiser que o XP espere mais, precisará modificar os valores do registro mencionados em outra postagem. Vou atualizar o código ...
— Scott Weinstein

Na verdade, eu quero que o XP interrompa o processo de desligamento permanentemente (como o Vista faz). De qualquer forma a sua resposta é o mais próximo até agora ...
— Lawand

2

Se você estiver disposto a editar um pouco o registro ... Iniciar -> Executar -> regedit

HKEY_CURRENT_USER \ Painel de controle \ Área de trabalho

Verifique se AutoEndTasks é 0 e defina WaitToKillAppTimeout como 20000 (o valor padrão de 2 segundos). Você pode definir o valor mais alto, se desejar. Há também o HungAppTimeout (o padrão é 5000), mas isso se aplica mais a aplicativos que não estão respondendo.


Isto dá mais tempo para os aplicativos a ser fechada, mas não parar permanentemente o processo de desligamento ...
— Lawand

0

Sempre que eu faço um desligamento no XP, se um programa está ocupado, isso me dá uma barra de progresso e uma opção para 'Finalizar agora' ou 'Cancelar'.

Clicar em 'Cancelar' interrompe o processo de desligamento. No entanto, o que já foi encerrado não volta.

Mas isso me dá tempo para salvar o que eu estava trabalhando antes de tentar novamente o desligamento.


Mas se um programa está respondendo (não ocupado) será forçada a fechar, mesmo que ele continha dados não salvos
— Lawand

isso não é o que você pediu - se ele não está respondendo, não importa se você está tentando desligar ou não, você vai perder os dados não salvos
— Warren

Desculpe, eu não deveria ter dito "programas ocupado", eu quis dizer programas que contêm um conjunto de dados que não foram salvos e que não estão ocupados ...
— Lawand

11
ah, então minha resposta ainda permanece - pelo menos em instalações simples do XP: sempre que eu fechei, mas tive, por exemplo, um documento não salvo no Word, tive a oportunidade de cancelar o desligamento, salvar meu documento (s), e, em seguida, reiniciar o processo de encerramento
— Warren

Alguns dias atrás eu instalado XP SP3 e agora o sistema faz o que você diz, enquanto que com SP2 não fiz ...
— Lawand
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.