คำสั่งที่ใช้ในการทำให้คอมพิวเตอร์เข้าสู่โหมดสลีป (ไม่จำศีล) คืออะไร?


63

ฉันต้องการทำให้ Windows PC ของฉัน (Windows 7) เข้าสู่สถานะสลีปผ่านบรรทัดคำสั่ง (เพื่อให้ฉันสามารถผูกกับปุ่มมาโครบนแป้นพิมพ์)

ปุ่มเปิดปิดบนพีซีตั้งค่าไว้ แต่ให้คอมพิวเตอร์เข้าสู่โหมดสลีป (แต่มันอยู่บนพื้นและฉันขี้เกียจเกินกว่าจะลงมา) ได้อย่างที่ฉันต้องการ (นอนโดยใช้โหมดไฮบริดในกรณีที่ฉันคลายพลังงาน)

คำสั่ง sleep ในเมนูปิดระบบยังใช้งานได้

ข้อมูลส่วนใหญ่ฉันพบว่าจะใช้;

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

แต่สิ่งนี้ทำให้คอมพิวเตอร์อยู่ในโหมดไฮเบอร์เนต ฉันปิดใช้งานไฮเบอร์เนต แต่ใช้ไฮบริดสลีป

ดังนั้นคำสั่งที่ใช้เพื่อทำให้คอมพิวเตอร์ของคุณเข้าสู่โหมดสลีป (ไม่จำศีล) คืออะไร?


5
rundll32.exe PowrProf.dll,SetSuspendStateไม่แนะนำ มันอันตราย. (เพราะมันทำลายกองซ้อนเนื่องจากไม่สอดคล้องกับลายเซ็นของฟังก์ชันที่เรียกร้องจากRundll32นั้นสิ่งเลวร้ายที่คาดไม่ถึงอาจเกิดขึ้นดังที่ Raymond Chen เตือน …)
Aaron Thoma

ที่เกี่ยวข้อง: superuser.com/questions/42124/…
Nayuki

คำตอบ:


13

ฉันพบวิธีแก้ปัญหา ฉันติดตั้งโปรแกรมฟรีแวร์ที่เรียกว่า AutoHotKey และบันทึกขั้นตอนในการเรียกใช้เมนู Start -> Sleep ในไฟล์สคริปต์ จากนั้นฉันก็ปฏิบัติตามไฟล์สคริปต์เป็นไฟล์ SleepWin7.exe ที่ทำงานได้แบบสแตนด์อโลน

ตอนนี้ฉันเพียงเรียกใช้ SleepWin7.exe เพื่อทำให้คอมพิวเตอร์ของฉันเข้าสู่โหมดไฮบริดสลี

คุณอาจถอนการติดตั้ง AutoHotKey หากนี่คือทั้งหมดที่คุณต้องการ


อัปเดต: โซลูชันด้านบนไม่ทำงานเมื่อผู้ใช้ไม่ได้ลงชื่อเข้าใช้เช่นหน้าจอเข้าสู่ระบบ Windows 7 (คอมพิวเตอร์ของฉันตื่นตอนตีสี่ทุกวันอาทิตย์เพื่อทำการสำรองข้อมูลรายสัปดาห์ซึ่งทำได้โดยไม่ต้องลงชื่อเข้าใช้ของผู้ใช้) ในกรณีเช่นนี้โปรแกรมWizmoยังคงทำงาน:

wizmo.exe สแตนด์บายที่เงียบสงบ!


3
นี่คือสคริปต์ AutoHotKey (ใช้แป้นพิมพ์); ส่ง {LWINDOWN} {LWINUP} WinWait, เมนู Start, IfWinNotActive, เมนู Start,, WinActivate, เมนู Start, WinWaitActive, เมนู Start, ส่ง, {TAB} {UP} {RIGHT} s
Eric L

นี่คือทางออกที่ฉันใช้ เนื่องจากรองรับการนอนหลับแบบไฮบริด
Eric L

+1 สิ่งนี้รู้สึกสกปรก แต่ใช้งานได้ ฉันต้องเปลี่ยนส่วนส่งล่าสุดเป็น: "ส่ง {RIGHT} {RIGHT} s" BTW ฉันเกือบจะทำให้คุณ -1 สำหรับแนะนำในการถอนการติดตั้ง AHK เป็นที่จะยกโทษ :)
demoncodemonkey

ฉันได้เพิ่มสิ่งนี้ลงในจุดเริ่มต้นของสคริปต์เพื่อให้แน่ใจว่าคำสั่งไปที่หน้าต่างเดสก์ท็อปและป้องกันไม่ให้สูญหาย: WinActivate, ahk_class Progman
demoncodemonkey

1
หลังจากเปลี่ยนมาใช้ Windows 8 ตอนนี้ฉันใช้ NirCmd (น้ำหนักเบามาก) และทำให้คอมพิวเตอร์เข้าสู่โหมดไฮบริดสลี nircmd.exe standbyข้อมูลเพิ่มเติมสามารถดูได้ที่นี่ -> nirsoft.net/utils/nircmd.html
Eric L

73

หวังว่าคุณจะพบว่ามีประโยชน์เหล่านี้

ปิดตัวลง %windir%\System32\shutdown.exe -s

Reboot %windir%\System32\shutdown.exe -r

ออกจากระบบ %windir%\System32\shutdown.exe -l

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

จำศีล %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Hibernate

ข้อควรระวัง: rundll32.exe ไม่ควรนำมาใช้เพื่อเปิด powerprof.dll แต่คุณควรเรียก SetSuspendState โดยตรง สิ่งนี้สามารถทำได้โดยใช้ Powershell - สร้างไฟล์เช่น sleep.ps1 โดยมีเนื้อหาด้านล่าง

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

powershell -File C:\your-path\sleep.ps1จากนั้นเรียกใช้โดยใช้ คุณอาจต้องเรียกใช้คำสั่งSet-ExecutionPolicy RemoteSignedเพื่อเปิดใช้งานสคริปต์ PowerShell เพื่อเรียกใช้

สคริปต์ด้านบนเป็นสาเหตุให้ระบบหยุดทำงานชั่วคราวซึ่งจะเข้าสู่โหมดสลีปหรือไฮเบอร์เนตขึ้นอยู่กับการตั้งค่าไฮเบอร์เนตปัจจุบันของคุณ หากต้องการเปลี่ยนการตั้งค่าจากบรรทัดคำสั่งให้รันpowercfg -h off(หรือon) จากบรรทัดคำสั่งในฐานะผู้ดูแลระบบ


4
ดีจัง! +1 ...
studiohack

9
นี่มันเยี่ยมมาก แต่ที่ไหนสำหรับ Sleeeeeeeeeeeeep
demoncodemonkey

7
ทางลัดสแตนด์บายทำให้เครื่อง Win7 ของฉันอยู่ในโหมดไฮเบอร์เนต :(
ผู้ใช้

5
@demoncodemonkey: Standbyyyyyyyyyyyyy = Sleeeeeeeeeeeeeeep :)
Răzvan Flavius ​​Panda

11
เห็นได้ชัดว่ามันไม่: superuser.com/a/331545/21887ดังนั้นจึงถือว่าเป็นอันตรายที่จะใช้วิธีนี้และไม่แนะนำ (มันทำลายกองซ้อน)
Aaron Thoma

16

ดูยูทิลิตี้ฟรีของWizmoซึ่งสามารถทำสิ่งต่างๆมากมาย
คำสั่งที่คุณกำลังมองหาน่าจะเป็น:

สแตนด์บาย wizmo


Wizmo ดูดีมาก! เกือบทำให้ฉันหวังว่าฉันไม่ได้เป็นแฟนแม็ค
trolle3000

ไม่จำเป็นต้องติดตั้งยูทิลิตี้ เครื่องมือง่าย ๆ ที่ดี
Artur Carvalho

2
wizmo.exe quiet standbywizmo.exeยับยั้งดังขึ้นน่ารำคาญเนื้อหาโดย
Aaron Thoma

14

คุณสามารถสร้างไฟล์ที่มีนามสกุล. ps1 (powershell) เช่น "sleep.ps1" และเขียนสิ่งนี้:

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

ฉันใช้สิ่งนี้เมื่อฉันมีบางสิ่งบางอย่างทำงานและต้องออกจากพีซีและไม่ต้องการที่จะปิด ดังนั้นฉันจึงเปลี่ยนสคริปต์เป็นดังนี้:

$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)

และตอนนี้เมื่อฉันเรียกใช้ฉันเพิ่งป้อนนาทีที่ฉันต้องการรอจนกระทั่งหลับ

คุณสามารถเรียกใช้จากบรรทัด cmd โดยการเขียน

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

หากคุณไม่เคยเรียกใช้สคริปต์ PowerShell มาก่อนคุณจะต้องเรียกใช้ก่อน

Set-ExecutionPolicy RemoteSigned

ใน PowerShell เพื่อเปิดใช้งานสคริปต์ สิ่งนี้จะต้องถูกเรียกใช้เพียงครั้งเดียว


ชื่อตัวแปรของคุณไม่ได้อยู่ข้างหลังเหรอ?
Ullallulloo

11

ด้วยSysinternals PsTools [ ดาวน์โหลด ]:

psshutdown -d

โดยใช้เครื่องมือบรรทัดคำสั่งPsShutdown

(คุณอาจต้องการโซลูชันนี้ถ้าคุณดาวน์โหลด PsTools ไปแล้วมันค่อนข้างใช้กันอย่างแพร่หลายนอกจากนั้นวิธีนี้เทียบเท่ากับการใช้)wizmoquiet standby

ที่มา: https://superuser.com/a/331545/21887


7

ฉันใช้ยูทิลิตี้SLEEP.EXEนี้มาหลายปีแล้ว มันใช้งานได้ดีและคุณไม่จำเป็นต้องจำว่าจะให้อาร์กิวเมนต์ใดสำหรับโหมด suspend (รูปแบบเริ่มต้นของ "sleep")


SLEEP.EXEใช้ได้กับฉันใน Windows 7 Pro SP1 หน้าหลักยังแสดงรายการเครื่องมือบรรทัดคำสั่งที่มีประโยชน์อื่น ๆ อีกมากมายสำหรับ Windows ขอบคุณ @jjlin!
CODE-READ

6

เพื่อปิดใช้งานโหมด Hibernate ที่คุณต้องใช้

powercfg -h off

ตอนนี้rundll32 powrprof.dll SetSuspendStateจะทำให้สถานีของคุณอยู่ในโหมดสแตนบาย

[แก้ไข]

จริง ๆ แล้วฉันไม่สามารถตั้งค่าสำหรับไฮบริดสลีปได้เนื่องจากมีแล็ปท็อป (สถานะที่ไม่พร้อมใช้งานบนสถานีมือถือ) สำหรับไฮบริดสลีปคุณต้องเปิดใช้งานไฮเบอร์เนตและบางคนบอกว่า rundll32 powrprof.dll โหมดในการตั้งค่าแผงควบคุมของคุณ \ การจัดการพลังงาน โปรดลองถ้าrundll32 powrprof.dll, ไฮบริดสลี SetSuspendStateให้ผลลัพธ์บางอย่าง


นี่เป็นการปิดการใช้งานการนอนหลับแบบไฮบริดด้วยดังนั้นจึงเป็นไปตามวัตถุประสงค์ที่ต้องการ
Eric L

rundll32 powrprof.dll SetSuspendState ไฮบริดสลีปยังคงทำให้คอมพิวเตอร์เข้าสู่โหมดไฮเบอร์เนต ขอบคุณสำหรับความคิด
Eric L

rundll32 ไม่ได้ออกแบบมาสำหรับการเรียก SetSuspendState ดังนั้นจึงได้รับค่าพารามิเตอร์ที่ไม่ถูกต้อง นั่นเป็นสาเหตุที่ทำให้เกิดการไฮเบอร์เนตหากคุณไม่ได้ปิดใช้งานโดยเจตนา
SergeyT

5

สร้างไฟล์ bat โดย 600 หน่วงเวลาเป็นวินาที

ping -n 600 -w 1 127.0.0.1> nul

powercfg -h ปิด

% windir% \ System32 \ rundll32.exe powrprof.dll, สแตนด์บาย SetSuspendState


วิธีที่ยอดเยี่ยมในการทำให้คอมพิวเตอร์เข้าสู่โหมดสลีปและส่งคนอื่นที่อยากนอนหลับได้ง่าย
Maurycy

คำตอบที่สร้างสรรค์!
Jane Panda

อย่าใช้ rundll32.exe เพื่อเรียก SetSuspendState: มันไม่ได้ถูกออกแบบมาสำหรับสิ่งนั้น ดูคำอธิบายได้ที่นี่
SergeyT

4

หากคุณมีความสามารถในการรวบรวมโปรแกรม. NET คำสั่งต่อไปนี้จะทำ

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

หมายเหตุ:คุณไม่จำเป็นต้องปิดใช้งานการไฮเบอร์เนตตามrundll32 powrprof.dll,SetSuspendStateคำสั่งที่จำเป็น นอกจากนี้คุณยังสามารถใช้PowerState.Hibernateซึ่งจะจำศีลเครื่องหากคุณต้องการ

คุณสามารถจะรวบรวม EXE ด้วยคำสั่งนี้กับรุ่นของVisual Studio เพียงสร้างแอปพลิเคชันคอนโซลและเพิ่มการอ้างอิงถึงSystem.Windows.FormsDLL


1
Wizmo ที่อ้างถึงข้างต้นโดยทั่วไปได้ทำสิ่งนี้แล้ว - การใช้ดูเหมือนว่าจะเทียบเท่า และมันเขียนโดย Steve Gibson และเป็นอิสระดังนั้นอาจดีกว่าสิ่งที่ฉันเขียนด้วยมือในแบบเดียวกัน!
stevemidgley

+1 กำลังมองหาบางสิ่งเช่นนี้ที่นี่superuser.com/q/310045/84229
ผู้ใช้

คุณไม่จำเป็นต้องใช้Visual Studioในการรวบรวม คุณcsc.exeสามารถใช้คอมไพเลอร์บรรทัดคำสั่งแทนได้ ติดตั้งแล้วใน Windows ทุกรุ่นที่ทันสมัย
SergeyT
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.