Quelle est la commande à utiliser pour mettre votre ordinateur en veille (pas en veille prolongée)?

63

Je souhaite mettre mon PC Windows (Windows 7) en veille via une ligne de commande (afin que je puisse me lier au bouton Macro du clavier).

Le bouton d'alimentation sur le PC est configuré pour mais l'ordinateur pour dormir (mais il est sur le sol et je suis trop paresseux pour atteindre) il exactement comme je le veux (dort en utilisant le mode hybride au cas où je perdrais le pouvoir)

La commande de veille du menu d'arrêt fonctionne également.

la plupart des informations que j'ai trouvées disent d'utiliser;

%windir%\system32\rundll32.exe PowrProf.dll, SetSuspendState 0,1,0

Mais cela met l'ordinateur en mode veille prolongée. J'ai désactivé l'hibernation mais j'utilise un sommeil hybride.

Alors, quelle est la commande à utiliser pour mettre votre ordinateur en veille (pas en veille prolongée)?

Eric L
la source
5
rundll32.exe PowrProf.dll,SetSuspendStaten'est pas recommandé. C'est dangereux. (Parce que cela corrompt la pile, car il ne respecte pas la signature de fonction demandée par Rundll32. Des événements inattendus peuvent alors se produire, comme le prévient Raymond Chen …)
Aaron Thoma

Réponses:

13

J'ai trouvé une solution. J'ai installé un programme gratuit appelé AutoHotKey et enregistré les étapes permettant d'appeler le menu Démarrer -> Mettre en veille dans un fichier de script. Ensuite, j'ai intégré le fichier de script dans un fichier exécutable autonome, SleepWin7.exe.

Maintenant, je lance simplement SleepWin7.exe pour mettre mon ordinateur en veille hybride.

Vous pouvez désinstaller AutoHotKey si c'est tout ce dont vous avez besoin.


Mise à jour: La solution ci-dessus ne fonctionne pas lorsque l'utilisateur n'est pas connecté, c'est-à-dire l'écran de connexion Windows 7. (Mon ordinateur se lève tous les dimanches à 4 heures du matin pour effectuer une sauvegarde hebdomadaire, ce qui se fait sans connexion.) Dans ce cas, le programme Wizmo fonctionne toujours:

wizmo.exe veille silencieux!

Andy Lee
la source
3
Voici un script AutoHotKey (utilisant le clavier); Envoyer, {LWINDOWN} {LWINUP} WinWait, menu Démarrer, IfWinNotActive, menu Démarrer, WinActivate, menu Démarrer, WinWaitActive, menu Démarrer, Envoyer, {TAB} {UP} {DROIT} s
Eric L
C'est la solution que j'ai finalement utilisée. comme il supporte le sommeil hybride.
Eric L
+1 Cela semble sale mais ça marche. Je devais changer la dernière pièce Send en: "Send, {RIGHT} {RIGHT} s". BTW, je vous ai presque donné un -1 pour recommander de désinstaller AHK, car ce serait impardonnable :)
demoncodemonkey
J'ai également ajouté ceci au début du script pour que les commandes soient affichées dans la fenêtre du bureau et les empêcher de se perdre: WinActivate, ahk_class Progman
demoncodemonkey le
1
Après être passé à Windows 8, j'utilise maintenant NirCmd (très léger) et met l'ordinateur en veille hybride; nircmd.exe standbyplus d'informations peuvent être trouvées ici -> nirsoft.net/utils/nircmd.html
Eric L
73

J'espère que vous les trouverez utiles.

Fermer %windir%\System32\shutdown.exe -s

Redémarrer %windir%\System32\shutdown.exe -r

Se déconnecter %windir%\System32\shutdown.exe -l

Etre prêt %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Standby

Hiberner %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Hibernate

Attention: rundll32.exe ne doit pas être utilisé pour lancer powerprof.dll . Au lieu de cela, vous devez appeler directement SetSuspendState. Cela peut être fait en utilisant Powershell - créez un fichier, par exemple sleep.ps1, avec le contenu ci-dessous.

Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.Application]::SetSuspendState("Suspend", $false, $true)

Puis lancez-le avec powershell -File C:\your-path\sleep.ps1. Vous devrez peut-être d'abord exécuter la commande Set-ExecutionPolicy RemoteSignedpour activer l'exécution des scripts PowerShell.

Le script ci-dessus provoque une suspension du système, qui se met en veille ou en veille prolongée en fonction de votre paramètre de veille prolongée. Pour modifier ce paramètre à partir de la ligne de commande, exécutez powercfg -h off(ou on) à partir de la ligne de commande en tant qu'administrateur.

Imoatama
la source
4
whoa gentil! +1 ...
studiohack
9
C'est génial, mais où est celui pour Sleeeeeeeeeeeeep
demoncodemonkey
7
Raccourci en attente pour mettre ma machine Win7 en veille prolongée :(
utilisateur le
5
@demoncodemonkey: Standbyyyyyyyyyyyy = Sleeeeeeeeeeeeep
Răzvan Flavius ​​Panda Le
11
Apparemment, ce n'est pas le cas: superuser.com/a/331545/21887 Il est donc considéré dangereux d'utiliser cette méthode et n'est pas recommandé. (Cela corrompt la pile.)
Aaron Thoma Le
16

Voir l'utilitaire gratuit de Wizmo , qui peut faire beaucoup de choses.
La commande que vous recherchez est probablement:

Wizmo en veille

harrymc
la source
Wizmo a l'air plutôt cool! Ça me donne presque envie de ne pas être un
fan fan de
L'utilitaire n'a pas besoin d'être installé. Bel outil simple.
Artur Carvalho
2
wizmo.exe quiet standbysupprime les bips sonores gênants par wizmo.exe.
Aaron Thoma
14

Vous pouvez créer un fichier avec l'extension .ps1 (powershell) comme "sleep.ps1" et écrire ceci:

Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.Application]::SetSuspendState("Suspend", $false, $true)

J'utilise cela quand j'ai quelque chose en cours d'exécution et que je dois quitter le PC sans vouloir l'éteindre. Donc, je change le script pour ressembler à ceci:

$minutes = read-host "Enter minutes to wait until sleep";
$secs= 60*$minutes;
Start-sleep -s $secs

Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.Application]::SetSuspendState("Suspend", $false, $true)

Et maintenant, quand je le lance, je saisis simplement les minutes que je veux attendre avant de dormir.

Vous pouvez exécuter ceci à partir de la ligne cmd en écrivant

powershell -File C:\your-path\sleep.ps1

Si vous n'avez jamais exécuté de script PowerShell auparavant, vous voudrez tout d'abord exécuter

Set-ExecutionPolicy RemoteSigned

dans PowerShell pour activer l'exécution du script. Cela ne doit être exécuté qu'une seule fois.

Artur Carvalho
la source
Les noms de vos variables ne sont-ils pas inversés?
Ullallulloo
11

Avec Sysinternals PsTools [ télécharger ]:

psshutdown -d

en utilisant l'outil de ligne de commande PsShutdown .

(Vous pouvez préférer cette solution si vous avez déjà téléchargé PsTools, il est assez largement utilisé. En dehors de cela, cette approche équivaut à utiliser .)wizmoquiet standby

Source: https://superuser.com/a/331545/21887

Aaron Thoma
la source
7

J'utilise cet utilitaire SLEEP.EXE depuis des années. Cela fonctionne bien et vous n'avez pas à vous rappeler quels arguments lui attribuer pour le mode suspension (sa forme par défaut de "veille").

jjlin
la source
SLEEP.EXE fonctionne pour moi sur Windows 7 Pro SP1. La page parent répertorie également de nombreux autres outils de ligne de commande utiles pour Windows. Merci, @ jjlin!
CODE-REaD
6

pour désactiver le mode veille prolongée, vous devez utiliser

powercfg -h off

maintenant, rundll32 powrprof.dll, SetSuspendState mettra votre station en mode veille

[MODIFIER]

En fait, je ne peux pas configurer de mode de veille hybride, car j’ai un ordinateur portable (état qui n’est pas disponible sur les stations mobiles). Pour le mode de veille hybride, vous devez activer la veille prolongée et certains disent que rundll32 powrprof.dll, SetSuspendState, déclenche le mode de veille par défaut. mode dans les paramètres de gestion de l’alimentation du panneau de configuration. S'il vous plaît essayer si rundll32 powrprof.dll, sommeil hybride SetSuspendState donner quelques résultats.


la source
Cela désactive également le sommeil hybride, ce qui va donc à l'encontre du but recherché
Eric L
rundll32 powrprof.dll, veille hybride SetSuspendState toujours mettre l'ordinateur en veille prolongée. merci pour l'idée.
Eric L
rundll32 n'est pas conçu pour appeler SetSuspendState, il obtient donc des valeurs de paramètre incorrectes. C’est pourquoi il cause toujours l’hibernation si vous ne l’avez pas désactivé intentionnellement.
SergeyT
5

Créez un fichier bat, où 600 correspond à un délai en secondes.

ping -n 600 -w 1 127.0.0.1> nul

powercfg -h off

% windir% \ System32 \ rundll32.exe powrprof.dll, SetSuspendState Standby

dim77x
la source
Excellent moyen de mettre l'ordinateur en veille, et très facile d'envoyer quelqu'un d'autre qui veut avoir le sommeil retardé.
Maurycy
Réponse créative!
Jane Panda
N'utilisez pas rundll32.exe pour appeler SetSuspendState: il n'est pas conçu pour cela. Voir les explications ici
SergeyT
4

Si vous êtes compétent pour compiler un programme .NET, utilisez la commande suivante

System.Windows.Forms.Application.SetSuspendState(PowerState.Suspend, 
                                                 false,   /* force */
                                                 true     /* disableWake */);

Remarque: Il n'est pas nécessaire de désactiver le mode veille prolongée, comme requis par la rundll32 powrprof.dll,SetSuspendStatecommande. Vous pouvez également utiliser PowerState.Hibernatele mode hibernation de la machine si vous le souhaitez.

Vous pouvez facilement compiler un fichier EXE avec cette commande avec n’importe quelle version de Visual Studio . Créez simplement une application console et ajoutez une référence à la System.Windows.FormsDLL.

Simon
la source
1
Wizmo, cité ci-dessus, l'a déjà fait: utiliser cela semble être l'équivalent. Et c'est écrit par Steve Gibson et gratuit, donc probablement meilleur que ce que je ferais à la main en codant la même chose!
Stévemidgley le
+1 Vous cherchez quelque chose comme ça ici superuser.com/q/310045/84229
utilisateur
Vous n'avez même pas besoin d'utiliser Visual Studiopour compiler. Au lieu de cela, le compilateur en ligne de commande csc.exepourrait être utilisé. Il est déjà installé dans toutes les versions modernes de Windows.
SergeyT