Dormir un ordinateur via un fichier batch dans Windows 7

14

Je veux créer un fichier de commandes qui mettra mon ordinateur en veille après un certain temps.

La chose la plus proche que j'ai trouvée est de le mettre en veille, mais semble fonctionner différemment du bouton de veille de mon clavier (démarrage plus long, ne se réveille pas en cliquant sur la souris). Des idées? Serait-ce plus facile en Python ou C #?

La technique moins que idéale mentionnée ci-dessus appelle cela dans l'invite cmd:

Rundll32.exe powrprof.dll,SetSuspendState
Saebin
la source
Ajoutez simplement un compte à rebours dans le .bat et exécutez-le après cela.
Apache
ressemble à un double de superuser.com/questions/83437/…
akira
L'hibernation est totalement différente, mais c'est la bonne solution, je suppose.
Apache
Je crois que la chose rundll est la même chose que l'hibernation. Avec le sommeil, vous cliquez sur la souris et votre écran de connexion est là dans quelques secondes ... l'hibernation doit revérifier le bios, les disques durs et transférer l'état enregistré du disque dur vers le ram et ensuite démarrer les fenêtres. Le seul inconvénient du sommeil est que vous perdez de l'énergie et que l'état enregistré stocké dans le ram est perdu (et les anciens ordinateurs laissent en fait plus de composants comme le bloc d'alimentation et les ventilateurs).
Saebin

Réponses:

26

Commandez simplement

rundll32.exe powrprof.dll,SetSuspendState

Le système hiberne- t-il , mais si vous écrivez ceci:

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

Et désactivez l' hibernation avec la commande:

powercfg -hibernate off

Maintenant, votre système s'endormira et se réveillera lors du déplacement de la souris si vous sélectionnez un périphérique pour celui-ci (faites défiler vers le bas pour savoir comment).

Lot d'une minuterie:

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

1200 représente les secondes, ce qui signifie qu'après 20 minutes, le lot exécutera la commande sleep.

En option, vous pouvez empêcher l'annulation du compte à rebours (si vous appuyez sur une touche de la fenêtre batch):

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

Petit HOWTO sur le réveil avec la souris:

Allez dans: Démarrer -> Panneau de configuration -> Souris.

texte alternatif

Dans la fenêtre Propriétés de la souris , cliquez sur l' onglet Matériel et sélectionnez votre souris dans la liste des périphériques. Normalement, il n'y aura qu'une seule souris répertoriée ici, mais cela dépendra du matériel que vous avez connecté à votre ordinateur. Lorsque vous avez sélectionné votre souris dans la liste, cliquez sur le bouton Propriétés .

texte alternatif

Maintenant, dans la fenêtre Propriétés de votre souris, cliquez sur le bouton Modifier les paramètres de l' onglet Général .

texte alternatif

Dans la fenêtre qui s'ouvre, cliquez sur l' onglet Gestion de l' alimentation et cochez l'option intitulée Autoriser ce périphérique à réveiller l'ordinateur . Cliquez sur le bouton OK dans cette fenêtre et cliquez sur le bouton OK dans les fenêtres Propriétés de la souris qui sont toujours ouvertes. À partir de maintenant, vous pouvez réveiller Windows 7 du mode veille en cliquant sur un bouton de la souris ou en déplaçant la souris.

texte alternatif

Anotomix
la source
3
wow man, vous aimez vraiment répondre aux questions :)
Omu
2
shutdown /h

va hiberner l'ordinateur (pas sûr de suspendre cependant).

Stacey Richards
la source
2

Solution de travail!
J'ai dû utiliser l' PsShutdownutilitaire pour permettre un bon sommeil (le principal problème est de SetSuspendStatene pas permettre aux minuteurs de réveiller la machine). Mon fichier batch pour dormir est une simple ligne:

PsShutdown -d -t 2
P Pace
la source
Veuillez lire Comment puis-je recommander un logiciel pour obtenir des conseils sur la façon de recommander un logiciel. Vous devez fournir au moins un lien, des informations supplémentaires sur le logiciel lui-même et la façon dont il peut être utilisé pour résoudre le problème dans la question.
DavidPostill
1
Cela n'a pas fonctionné sur mon PC ...
mrbengi
1

.NET à la rescousse. Cette solution a mis l'ordinateur en veille sans avoir à modifier la configuration du PC (désactivation de la mise en veille prolongée). Exécutez cette commande en lot:

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

Vous pouvez utiliser soit ::Suspendpour dormir, soit ::Hibernate(ce qui fonctionne comme les autres réponses). Documentation pour SetSuspendState.

Comme l' System.Windows.Formsespace de noms n'est pas chargé par défaut (il le fait dans Powershell ISE), vous devez d'abord charger l'assembly pour cela.

réponse originale

Velda
la source
0

Vous pouvez essayer SetSystemPowerState pour éviter d'avoir à désactiver Hiberanate.

rundll32.exe kernel32.dll, SetSystemPowerState

Notez que l'ajout de 1,0 ou 1 0 ou même de faire Rundll32.exe powrprof.dll, SetSuspendState 0 0 1 ou Rundll32.exe powrprof.dll, SetSuspendState 0,0,1 que les arguments (0,0,1) signifient RIEN.

Le powrprof.dll, SetSuspendState n'analyse pas les arguments de style rundll32 et les ignore donc. C'est pourquoi vous devez désactiver la mise en veille prolongée.

Rodney
la source
1
Ceci est utile pour Windows XP, pas Vista ou version ultérieure.
Rodney
1
Notez que rundll32 ignore les arguments que vous lui donnez (d'où la raison pour laquelle SetSuspendState hiberne toujours) car la DLL n'est pas conçue pour accepter les arguments de rundll32.
Rodney
-1: C'est carrément faux. Il ne fonctionne pas sous le système d'exploitation souhaité de l'OP.
nc4pk
rundll32 ne passe PAS les arguments, c'est pourquoi vous devez désactiver Hibernate pour le faire fonctionner. Les arguments par défaut lui indiquent de toujours mettre en veille prolongée, mais si la mise en veille prolongée est désactivée, l'API DLL est par défaut en veille.
Rodney
0

Créez simplement un fichier batch et insérez les lignes suivantes:

7200 = 2 hours

@echo off
timeout /t 7200 /nobreak
powercfg -h off
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
powercfg -h on
Chris Fischer
la source