Dormir um computador via arquivo em lotes no Windows 7


13

Desejo criar um arquivo em lotes que interrompa meu computador após um período de tempo.

A coisa mais próxima que encontrei foi colocá-lo em modo de espera, mas parece funcionar de maneira diferente do botão de suspensão no teclado (inicialização mais longa, não é acionada com o clique do mouse). Alguma ideia? Seria mais fácil em Python ou C #?

A técnica menos ideal do que a mencionada acima está chamando isso no prompt do cmd:

Rundll32.exe powrprof.dll,SetSuspendState

Basta adicionar uma parte da contagem regressiva ao .bat e executar isso depois disso.
Apache


A hibernação é totalmente diferente, mas sim, essa é a solução correta, eu acho.
Apache

Eu acredito que a coisa básica é a mesma que hibernação. Com o modo de suspensão, você clica no mouse e sua tela de login fica em alguns segundos ... a hibernação precisa verificar novamente a BIOS, os discos rígidos e transferir o estado salvo do disco rígido para ram e depois inicializar as janelas. A única desvantagem do sono é se você perder energia e o estado salvo armazenado no RAM for perdido (e os PCs mais antigos realmente deixarem mais componentes, como PSU e ventiladores).
Saebin 26/05/10

Respostas:


25

Simplesmente comando

rundll32.exe powrprof.dll,SetSuspendState

O sistema hiberna , mas se você escrever isso:

rundll32.exe powrprof.dll,SetSuspendState 0,1,0

E desative a hibernação com o comando:

powercfg -hibernate off

Agora, seu sistema entrará em sono e será ativado com o movimento do mouse, se um dispositivo for selecionado (role para baixo para saber como).

Lote um cronômetro:

timeout /t 1200
rundll32.exe powrprof.dll,SetSuspendState 0,1,0

Onde 1200 é segundos, o que significa que após 20 minutos o lote executará o comando de suspensão.

Opcionalmente, você pode impedir o cancelamento da contagem regressiva (se você pressionar qualquer tecla na janela de lote):

timeout /t 1200 /nobreak
rundll32.exe powrprof.dll,SetSuspendState 0,1,0

Pouco HOWTO sobre acordar com o mouse:

Vá para: Iniciar -> Painel de Controle -> Mouse.

texto alternativo

Na janela Propriedades do mouse , clique na guia Hardware e selecione o mouse na lista de dispositivos. Normalmente, haverá apenas um mouse listado aqui, mas isso dependerá do hardware que você conectou ao seu computador. Quando você selecionar o mouse na lista, clique no botão Propriedades .

texto alternativo

Agora, na janela Propriedades do mouse, clique no botão Alterar configurações na guia Geral .

texto alternativo

Na janela que é aberta, clique na guia Gerenciamento de energia e marque a opção Permitir que este dispositivo ative o computador . Clique no botão OK nesta janela e clique no botão OK nas janelas Propriedades do mouse que ainda estão abertas. A partir de agora, você pode ativar o Windows 7 no modo de suspensão clicando em um botão do mouse ou movendo o mouse.

texto alternativo


3
wow homem, você realmente gosta de responder a perguntas :)
Omu

2
shutdown /h

hibernará o computador (embora não tenha certeza sobre a suspensão).


2

Solução de trabalho!
Eu tive que usar o PsShutdownutilitário para permitir uma suspensão adequada (o principal problema é SetSuspendStatenão permitir que os temporizadores de despertar ativem a máquina). Meu arquivo em lotes para dormir é uma linha simples:

PsShutdown -d -t 2

Leia Como recomendo o software para obter algumas dicas sobre como você deve recomendar o software. Você deve fornecer pelo menos um link, algumas informações adicionais sobre o software em si e como ele pode ser usado para resolver o problema na pergunta.
DavidPostill

1
Isto não funcionou no meu pc ...
mrbengi

1

.NET para o resgate. Esta solução colocou o computador no modo de suspensão sem precisar alterar a configuração do PC (desativando a hibernação). Execute este comando no lote:

powershell.exe -command "Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.Application]::SetSuspendState([System.Windows.Forms.PowerState]::Suspend, $false, $false)"

Você pode usá-lo ::Suspendpara dormir ou ::Hibernate(como a outra resposta funciona). Documentação para SetSuspendState.

Como o System.Windows.Formsespaço para nome não é carregado por padrão (no Powershell ISE), você precisa carregar o conjunto para isso primeiro.

resposta original


0

Você pode tentar SetSystemPowerState para evitar ter que desativar o Hiberanate.

rundll32.exe kernel32.dll, SetSystemPowerState

Observe que adicionando 1,0 ou 1 0 ou mesmo executando Rundll32.exe powrprof.dll, SetSuspendState 0 0 1 ou Rundll32.exe powrprof.dll, SetSuspendState 0,0,1 que os argumentos (0,0,1) significam NADA.

O powrprof.dll, SetSuspendState não analisa argumentos de estilo rundll32 e, portanto, os ignora. É por isso que você precisa desativar a hibernação.


1
Isso é útil para o Windows XP, não para o Vista ou posterior.
Rodney

1
Observe que o rundll32 ignora os argumentos que você fornece (por isso o SetSuspendState sempre hiberna), pois a DLL não foi projetada para aceitar argumentos do rundll32.
Rodney

-1: Isso é totalmente errado. Ele não funciona no sistema operacional desejado do OP.
Nc4pk 27/09/13

O rundll32 NÃO está passando os argumentos, portanto, é necessário desativar o Hibernate para fazê-lo funcionar. Os argumentos padrão dizem para ele sempre hibernar, mas se o hibernar estiver desabilitado, a API da DLL assumirá o padrão de suspensão.
Rodney


0

Basta criar um arquivo em lotes e inserir as seguintes linhas:

7200 = 2 hours

@echo off
timeout /t 7200 /nobreak
powercfg -h off
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
powercfg -h on
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.