shutdown.exe /?
pokazuje wszystkie wybory do zamykania / restartu / uruchamiania zaawansowanych opcji / firmware'u.
Ale widzę tyle brzęczenia rzucanego na temat części Sleep.
_Wszyscy rozumieją, że rundll32.exe
nie powinien być używany do wywoływania przypadkowych funkcji i to po prostu działa tutaj dla hibernacji całkowicie przypadkowo. Ale taka jest natura Windows - czarna skrzynka, którą ludzie rozejrzeli się po okolicy i znaleźli setki obejść, aby wykonać pracę (shout-out to dostips). _
Istnieje tak wiele rozwiązań “proper” proponujących external tools, ale nie mogę znaleźć native (hybrydowy / pinvoke / cokolwiek) batch script, nawet jeśli to pytanie pozostało aktywne przez lata.
Więc oto moje proste * power\_sleep.bat **:
@echo off &mode 32,2 &color cf &title Power Sleep
set "s1=$m='[DllImport ("Powrprof.dll", SetLastError = true)]"
set "s2=static extern bool SetSuspendState(bool hibernate, bool forceCritical, bool disableWakeEvent);"
set "s3=public static void PowerSleep(){ SetSuspendState(false, false, false); }';"
set "s4=add-type -name Import -member $m -namespace Dll; [Dll.Import]::PowerSleep();"
set "ps_powersleep=%s1%%s2%%s3%%s4%"
call powershell.exe -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Bypass -Command "%ps_powersleep:"=\"%"
exit
Działa nawet jako duża komenda jednowierszowa:
powershell.exe -C "$m='[DllImport(\"Powrprof.dll\",SetLastError=true)]static extern bool SetSuspendState(bool hibernate,bool forceCritical,bool disableWakeEvent);public static void PowerSleep(){SetSuspendState(false,false,false); }';add-type -name Import -member $m -namespace Dll; [Dll.Import]::PowerSleep();"